// lexeme3.cpp: определяет точку входа для консольного приложения.
//
#define _CRT_SECURE_NO_WARNINGS
#include "stdafx.h"
#include <stdio.h>
#include <string>
#include <stdlib.h>
#include <iostream>
using namespace std;
int v(FILE* in);
int _tmain(int argc, _TCHAR* argv[])
{
FILE *in;
in=fopen("text.txt", "r");
v(in);
return 0;
}
int v(FILE* in) {
string val_str;
int val_int;
int state = 0;
while (in) {
switch (state) {
case 0:
if ((char)in >= 'a' && (char)in <= 'z') {
val_str = (char)(in++);
state = 1;
}
else if ((char)in >= '0' && (char)in <= '9') {
val_int = (char)(in++) - '0';
state = 2;
}
else if ((char)in == '=') {
in++;
cout << "ASSIGN | NULL" << endl;
return 0;
}
else {
cout << "EOT| NULL" << endl;
}
break;
case 1:
if (((char)in >= 'a' && (char)in <= 'z') || ((char)in >= '0' && (char)in <= '9'))
val_str += (char)(in++);
else {
cout << "IDENT| "<<val_str << endl;
return 0;
}
break;
case 2:
if ((char)in >= '0' && (char)in <= '9')
val_int = val_int * 10 + ((char)(in++) - '0');
else {
cout << "INTEGER| " << val_int << endl;
return 0;
}
break;
}
}
return 0;
}