Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/powerbi/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Antlr-输入错误不匹配-无法识别令牌_Java_Parsing_Antlr4 - Fatal编程技术网

Java Antlr-输入错误不匹配-无法识别令牌

Java Antlr-输入错误不匹配-无法识别令牌,java,parsing,antlr4,Java,Parsing,Antlr4,我有以下ANTLR语法 grammar DDGrammar; ddstmt: dd2 EOF; dd2: splddstart inlinerec; splddstart: '//' NAME DDWORD '*' NL; inlinerec: NON_JCL_CARD* END_OF_FILE ; DDWORD:'DD'; //DUMMYWORD: 'DUMMY'; NAME: [A-Z@#$]+; NON_JCL_CARD : ~'/' {getCharPositionInLi

我有以下ANTLR语法

grammar DDGrammar;

ddstmt: dd2 EOF;

dd2: splddstart inlinerec;
splddstart: '//' NAME DDWORD '*' NL;
inlinerec: NON_JCL_CARD* END_OF_FILE ;

DDWORD:'DD';
//DUMMYWORD: 'DUMMY';

NAME: [A-Z@#$]+;

NON_JCL_CARD  : ~'/'  {getCharPositionInLine() == 1}? .*? ( NL | EOF ) ;
END_OF_FILE   : '/'  {getCharPositionInLine() == 1}? '*' ;

NL  : '\r' '\n' ;
WS  : [ \t]+ -> skip ;
对于输入:

//SYSIN    DD  *     
SORT FIELDS=COPY
INCLUDE COND
any other program input @ $ ! & %
/*
我得到以下错误

DDGrammar::ddstmt:1:2:不匹配的输入'SYSIN DD*\r\n'应为名称
似乎SYSIN未被识别为名称令牌。事实上,以前也有类似的语法。看见但现在,同样的方法似乎对我不起作用

我猜您没有重新生成解析器/词法器类,因为以下代码工作正常:

String source = "//SYSIN    DD  *     \r\n" +
        "SORT FIELDS=COPY\r\n" +
        "INCLUDE COND\r\n" +
        "any other program input @ $ ! & %\r\n" +
        "/*";

DDGrammarLexer lexer = new DDGrammarLexer(CharStreams.fromString(source));
DDGrammarParser parser = new DDGrammarParser(new CommonTokenStream(lexer));

parser.ddstmt();

JCL解析起来很痛苦,因为它的上下文敏感性和whitspace的重要性

处理流内数据尤其棘手——如果您不知道,有几个选项可能会抛出一些东西


例如,有些可选关键字可能出现在DD*(或DD数据)之后;它们可能出现在DD语句本身的同一物理行上,也可能不出现在同一物理行上。另一个原因是,如果在instream DD语句中使用可选的“DLM=”运算符,则分隔符可以不是“/*”。我需要一个非常讨厌的Java函数来处理这种可变性,这是从来没有被推荐过的

我还没有谈到在Java应用程序中使用它的部分。我正在使用Antlr4IDEEclipse插件来编写语法。该工具显示此错误。插件可能有问题?我遗漏了什么吗?AntlWorks也不适用于Java8。因此,我只有有限的选项可能IDE没有正确处理谓词?总之,语法对输入的解析也很好。谢谢你,巴特。我会看看是否可以打开一个bug请求。你知道还有其他的插件可以用吗?没问题。不,我不知道。许多ANTLR插件/编辑器在正确处理谓词方面存在问题。