我正在编写类似于javascript的语言解析器及其分号插入ex:
var x = 1 + 2;
x;
和
var x = 1 + 2
x
甚至
var x = 1 +
2
x
是一样的。
现在我的词法分析器只有在令牌与分号不同时才会匹配换行符( \ n )。这对于像1和2这样的基本情况很好,但我如何处理第三种情况呢?即在表达中间发生新线。我不能每次都匹配新行,因为它会污染我的解析器(在任何地方插入带换行符号的备选方案)而且我也无法匹配它们,因为它是语句终止符。基本上,如果在那里有一个新的行字符或分号,我会在解析语句结束时以某种方式进行检查。
答案 0 :(得分:0)
这一段时间没有得到答复。我不明白为什么你不能将语句分隔为换行符**或*分号。有点像这样:
whitespace [ \t]+
%%
{whitespace} /* Skip */
;[\n]* return(SEMICOLON);
[\n]+ return(SEMICOLON);
然后你的语法根本没有搞乱,因为你只能在语法中得到分号。