我正在尝试为类C语言的编译器构建扫描仪,并且正在寻找一种生成令牌的有效方法......我有一个扫描功能:
vector<Token> scan(string &input);
还有一个 main 函数,它读入一个词法正确的文件并删除注释。(语言不支持/* , */
评论)我正在使用具有最大咀嚼能力的 DFA 来生成令牌......而且我很确定扫描仪的一部分是相当有效的。然而,扫描仪不能很好地处理大文件,因为它们都以一个字符串结尾......并且文件的 1000 行与第 1001 行的所有连接都破坏了扫描仪。不幸的是,我的 FSM 无法处理注释,因为它们被允许包含任何 Unicode 和其他奇数字符。我想知道......有没有更好的方法从标准输入中的文件到标记向量,请记住函数扫描必须采用单个字符串并返回单个向量,并且所有标记都必须在扫描结束时的单个向量...无论如何,这是“扫描”的代码:请不要太嘲笑我的坏主意:)
string in = "";
string build;
while(true)
{
getline(cin, build);
if( cin.eof() )
break;
if(build.find ("//") != string::npos)
build = build.substr(0, build.find("//",0));
in += " " + build;
}
try {
vector<Token> wlpp = scan(in);
...
...