处理EOF时ANTLR4挂起

时间:2016-04-29 14:12:26

标签: antlr antlr4

我有一个简单的ANTLR4语法:

clims = num2cell(get(gca, 'clim'));
[~, ~, ind] = histcounts(mags, linspace(clims{:}, size(currentColormap, 1)));

我正在测试如何使用换行规则,该规则允许最后一行不被CRLF终止。我用ANTLR v4.1和v4.5.3测试了语法。

几行文本的输入文件导致ANTLR4冻结,并在一段时间后导致OutOfMemoryException。看起来ANTLR4进入了一些无限循环。这是ANTLR4的错误吗?我做错了什么吗?另外,如果我删除了grammar Test; preprocessing_file: oneline+; oneline: IDENTIFIER? new_line; new_line: EOF|CRLF ; WS: [ \t\f]+ -> channel(2); CRLF: '\r'? '\n'; IDENTIFIER: (NONDIGIT | DIGIT )+ ; fragment DIGIT: [0-9]; fragment NONDIGIT: [_a-zA-Z] ; 规则中的EOF,那么一切正常。

2 个答案:

答案 0 :(得分:3)

只需要在主规则中添加vas_diff = vas_1 %>% left_join( x = filter(., group != "baseline") , y = filter(., group == "baseline") , by = c("user") ) %>% mutate(vas = vas.x - vas.y) %>% # compute offset select(user, group.x, vas) # remove temporary variables 即可。没有它,主规则永远不会终止 - 词法分析器将继续生成EOF规则成功使用的EOF个令牌。

new_line

答案 1 :(得分:0)

EOF [文件结尾]不应该在new_line规则中。只需改变

oneline: IDENTIFIER? new_line

oneline: IDENTIFIER? new_line?

如果需要验证,可以在以后的阶段验证new_line的存在