我有一个简单的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
,那么一切正常。
答案 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的存在