我正在嘗試構建一個類似於語言的C的編譯器的掃描器,並且正陷入一種有效的方式來生成令牌......我有一個掃描功能:在編譯器中提高std :: string的效率
vector<Token> scan(string &input);
而且還是一個主函數,它讀入詞法正確的文件並刪除註釋。 (該語言不支持/* , */
評論)我正在使用最大蒙克的DFA來生成令牌......並且我非常確定掃描程序的一部分效率相當高。但是掃描器不能很好地處理大文件,因爲它們都以一個字符串結尾......並且所有與行1001相連的1000行文件都會破壞掃描器。不幸的是,我的FSM無法處理評論,因爲它們被允許包含任何Unicode和其他奇怪的字符。我想知道...有沒有更好的方式從stdin中的文件轉到令牌的向量,請記住函數掃描必須採用單個字符串並返回單個向量,並且所有令牌都必須位於在掃描結束......一個矢量無論如何,這裏是「掃描」的代碼:請不要在我的壞主意笑得太辛苦:)
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);
...
...
這似乎是一個很好的解決方案,但是它給了我一個使用字符串流而不是+運算符的想法,你知道如何與使用istream_iterator相比嗎? –