Добрый вечер, не могу понять, как переходить между состояниями в лексическом анализаторе. Вот взял я один символ из файла, потом определяю, что он цифра, но возможно 3 случая тогда, к примеру,
a=3 - я должен вставить в вектор, индификатор "a"; да, но так как нету пробела, у меня "a=3" заносится в одну ячейку вектора.
c a= 3 - так же "a=" - в одной ячейке.
вот только это работает a = 3.
как мне вот запоминать, я ведь все время работаю, с одним символом.
Можно хотя бы с цифрами пояснить, то есть показать, как в данном случае будет переход состояний осуществляться. Мы должны с каждым новым символом находится в каком-то состоянии, это я понимаю, но вот как это в коде, хотя бы на таком маленьком примере, можете показать. Дальше я сам реализую.
Данный код, считывает файл, и заносит в вектор все слова этого файла. Предположим у меня в попалась вот такая вот конструкция a=3 - как мне разрешить эту ситуацию, чтобы в векторе было не "a=3", а "a", "=", "3" то есть 3 ячейки занимает в векторе эта строка.
#include "stdafx.h"
#include <cstdlib>
#include <iostream>
#include <fstream>
#include <string>
#include <cstring>
#include <vector>
using namespace std;
struct Lexeme {
int start, end;
string lexeme;
};
vector<Lexeme> v;
void gToken(ifstream &fin, vector<Lexeme> &v);
void wToken();
int main()
{
char filename[30];
ifstream fin;
char q;
//cin >> filename;
fin.open("text.txt");
gToken(fin, v);
fin.close();
wToken();
system("PAUSE");
return EXIT_SUCCESS;
}
void gToken(ifstream &fin, vector<Lexeme> &v)
{
int j = 0;
char ch;
Lexeme l;
while (fin >> ch)
{
int i = 0;
l.lexeme += ch;
while (fin.get(ch))
{
if (ch != ' ' && ch != '\n')
{
cout << ch<<endl;
l.lexeme += ch;
}
else
{
j++;
l.start = j - i;
l.end=j;
break;
}
}
v.push_back(l);
l.lexeme ="";
}
}
void wToken()
{
for (int i = 0; i < v.size(); i++) cout << v[i].lexeme << endl;
}