我正在用C ++编写一个词法分析器,我正逐字逐句地读取文件,但是,在这种情况下你如何进行标记化?我不能使用strtok,因为我的字符不是字符串。不知怎的,我需要继续阅读,直到我到达一个分界线?
答案 0 :(得分:2)
答案是是。你需要继续阅读,直到你达到分界符。
答案 1 :(得分:0)
有多种解决方案。
最简单的方法就是:保留已经读过的字符的缓冲区(std::string
),直到找到分隔符。此时,您从缓冲区中的累积字符构建一个令牌,清除缓冲区,并在缓冲区中推送分隔符(如果需要)。
另一种解决方案是提前阅读:即,使用std::getline
(例如)选取整行,然后检查此行上的内容。通常,行尾是一个自然的标记分隔符。
这很有效......当分隔符很容易时。
不幸的是,某些语言(如C ++)具有笨拙的语法。例如,在C ++ >>
中可以是:
>>
(用于右移和流提取)> >
)在这些情况下......好吧,只是不要担心令牌化程序的差异,让你的AST建筑消除歧义,它获得了更多的信息。
答案 2 :(得分:0)
根据您提供的信息。 如果要从文件中读取分隔符,请使用getline(char *,int,char)函数。
getline()用于读取最多n个字符或最多读取分隔符。
示例:
#include<fstream.h>
using namespace std;
main()
{
fstream f;
f.open("test.cpp",ios::in);
char *c;
f.getline(c,2,' ');
cout<<c; // upto 1 char or till a space
}