仅在特定条件下匹配换行符

时间:2014-08-31 11:28:56

标签: parsing flex-lexer lexer jison

我正在编写类似于javascript的语言解析器及其分号插入ex:

var x = 1 + 2;
x;

var x = 1 + 2

x

甚至

var x = 1 +
2
x

是一样的。

现在我的词法分析器只有在令牌与分号不同时才会匹配换行符( \ n )。这对于像1和2这样的基本情况很好,但我如何处理第三种情况呢?即在表达中间发生新线。我不能每次都匹配新行,因为它会污染我的解析器(在任何地方插入带换行符号的备选方案)而且我也无法匹配它们,因为它是语句终止符。基本上,如果在那里有一个新的行字符或分号,我会在解析语句结束时以某种方式进行检查。

1 个答案:

答案 0 :(得分:0)

这一段时间没有得到答复。我不明白为什么你不能将语句分隔为换行符**或*分号。有点像这样:

whitespace    [ \t]+
%%
{whitespace}    /* Skip */
;[\n]*        return(SEMICOLON);
[\n]+         return(SEMICOLON);

然后你的语法根本没有搞乱,因为你只能在语法中得到分号。