ANTLR语法 - 解析脚本块时出错

时间:2017-11-14 11:04:33

标签: java antlr grammar

我试图在ANTLR中创建一个语法,如下所示。

grammar EPL2;

standard_rule:
          'STANDARD' 'RULE' ':'
          'FILTER' SCRIPT
          'SINK' SCRIPT;

SCRIPT
 : '{' SCRIPT_ATOM* '}'
  ;


 fragment SCRIPT_ATOM
   : ~[{}]
   | '"' ( ~('"') )* '"'
   | '//' ~[\r\n]*
   | SCRIPT
   ;

 MultiLineComment
  : '/*' .*? '*/' -> channel(HIDDEN)
  ;

 SingleLineComment
  : '//' ~[\r\n\u2028\u2029]* -> channel(HIDDEN)
  ;

 SPACES
  : [ \u000B\t\r\n] -> channel(HIDDEN)
  ;

当我针对以下输入运行语法时:

STANDARD RULE:
FILTER { data.get("abc") == "a"; }
SINK { data.get("xyz") > 10 ;}

我收到此错误: 第3:36行不匹配的输入''期待' SINK'

我使用IntelliJ插件可视化解析树和层次结构。我可以看到第二个SCRIPT附加到第一个SCRIPT,如下图所示。

Hierarchy

当我关闭括号(})时,解析器应该前进到sink子句,但这不会发生。

如果我在第二个字符串中添加一个打开或关闭括号(" {a")s second 脚本正确显示。

enter image description here

我不知道我做错了什么,有什么线索吗?

0 个答案:

没有答案