我正在使用ANTLR为ZOS JCL语言编写语法。 可以有4种类型的线:
以下是我的语法文件中的片段:
dd4: JCLBEGIN ddname DDWORD '*' inlinerec INLINESTMTEND?;
inlinerec: (INLINEDATA)+ ;
fragment INLINEDATA: (~[\r\n])*;
.
.
.
DDWORD: 'DD';
.
.
JCLBEGIN: '//' ;
COMMENTBEGIN: '//*' ;
INLINESTMTEND: '/*' ;
.
.
WS : [\r\n] -> channel(HIDDEN);
使用AntlrWorks运行此语法时,解析器规则inlinerec
已正确匹配,但我收到以下错误:
line 24:0 mismatched input 'SORT' expecting INLINEDATA
我的代码中发生错误的部分是:
//SYSIN DD *
SORT FIELDS=COPY
INCLUDE COND
/*
如何解决此错误?
答案 0 :(得分:1)
解析器规则inlinerec正确匹配
它可能看起来那样,但实际上,它没有正确匹配。
第24行:0输入'SORT'不匹配期待INLINEDATA
片段规则在解析器规则中不可见(因此INLINEDATA
中无法使用inlinerec
)。
只需从fragment
删除INLINEDATA
关键字也不会有效,因为该规则会贪婪地匹配任何一行。您需要重新考虑您的方法。我不能给出更具体的建议,因为没有什么可以继续下去。如果您有后续问题,我建议您在此处创建一个新问题,其中SSCCE表示问题。祝你好运!
另见:https://github.com/antlr/antlr4/blob/master/doc/lexer-rules.md