Java ANTLR-分析不同的行类型-输入错误不匹配

Java ANTLR-分析不同的行类型-输入错误不匹配,java,antlr,antlr4,Java,Antlr,Antlr4,我正在使用ANTLR为ZosJCL语言编写语法。 可以有4种类型的线: 类型1:所有语句的前2个字符都以“/”开头 线路 类型2:注释以“/*”开头 类型3:以“/*”开头的行 类型4:以除类型1、2和3以外的任何其他图案开头的线条 下面是我的语法文件中的片段: dd4: JCLBEGIN ddname DDWORD '*' inlinerec INLINESTMTEND?; inlinerec: (INLINEDATA)+ ; fragment INLINEDATA: (~[\r

我正在使用ANTLR为ZosJCL语言编写语法。 可以有4种类型的线:

  • 类型1:所有语句的前2个字符都以“/”开头 线路
  • 类型2:注释以“/*”开头
  • 类型3:以“/*”开头的行
  • 类型4:以除类型1、2和3以外的任何其他图案开头的线条
下面是我的语法文件中的片段:

dd4:    JCLBEGIN ddname  DDWORD '*' inlinerec INLINESTMTEND?;

inlinerec: (INLINEDATA)+ ;
fragment INLINEDATA: (~[\r\n])*;
.
.
.
DDWORD:     'DD';
.
.
JCLBEGIN:       '//'    ;
COMMENTBEGIN:   '//*'   ;
INLINESTMTEND:  '/*'    ;
.
.
WS     : [\r\n] -> channel(HIDDEN);
使用AntlrWorks运行此语法时,语法分析器规则
inlineec
匹配正确,但出现以下错误:

line 24:0 mismatched input 'SORT' expecting INLINEDATA
我的代码中出现错误的部分是:

//SYSIN    DD  *                                      
SORT FIELDS=COPY
INCLUDE COND
/*  
如何解决此错误

inlinerec中的解析器规则已正确匹配

看起来可能是这样,但实际上,它并没有正确匹配

第24行:0不匹配的输入“排序”应为INLINEDATA

片段规则在解析器规则中不可见(因此,
INLINEDATA
不能在
inlineec
中使用)

简单地从
INLINEDATA
中删除
片段
关键字也不起作用,因为该规则会贪婪地匹配任何一行。你需要重新考虑你的方法。我不能给出更具体的建议,因为没有什么可谈的。如果您有后续问题,我建议您在此处创建一个新问题,以便使用一个显示问题的示例。祝你好运


另请参见:

感谢巴特的回答。为了更好地解释我的问题,我创建了一个独立的示例。问题是