gpt4 book ai didi

Antlr4:不匹配的输入

转载 作者:行者123 更新时间:2023-12-04 04:59:04 26 4
gpt4 key购买 nike

这是一个我认为很容易解析的简单语法测试,但我立即得到了“不匹配的输入”,我无法弄清楚 Antlr 正在寻找什么。

输入:

  # include "something" program TEST1 { BLAH BLAH }

我的语法:
  grammar ProgHeader;

program: header* prog EOF ;
header: '#' ( include | define ) ;
include: 'include' string ;
define: 'define' string string? ;
string: '"' QTEXT '"' ;
prog: 'program' QTEXT '{' BLOCK '}' ;
QTEXT: ~[\r\n\"]+ ;
BLOCK: ~[}]+ ; // don't care, example block
WS: [ \t\r\n] -> skip ;

输出错误信息:
line 1:0 mismatched input '# include "something" program TEST1 { BLAH BLAH '
expecting {'program', '#'}

这真的让我感到困惑,因为它说它正在寻找一个 '#' 并且在输入的开头有一个。我也抛弃了解析树。它似乎卡在顶部,在“程序”规则中:
(program # include "something" program TEST1 { BLAH BLAH  } )

哈?

这是驱动这个测试用例的完整程序,如果它很重要(我认为它不重要,上面的信息就足够了,但在这里):
  package antlrtests;

import antlrtests.grammars.*;
import org.antlr.v4.runtime.*;
import org.antlr.v4.runtime.tree.*;

/**
*
* @author Brenden Towey
*/
public class ProgHeaderTest {
private String[] testVectors = {
"# include \"something\" program TEST1 { BLAH BLAH } ",
};
public void runTests() {
for( String test : testVectors )
simpleTest( test );
}
private void simpleTest( String test ) {
ANTLRInputStream ains = new ANTLRInputStream( test );
ProgHeaderLexer wpl = new ProgHeaderLexer( ains );
CommonTokenStream tokens = new CommonTokenStream( wpl );
ProgHeaderParser wikiParser = new ProgHeaderParser( tokens );
ParseTree parseTree = wikiParser.program();
System.out.println( "'" + test + "': " + parseTree.toStringTree(
wikiParser ) );
}
}

以及完整的输出:
run:
line 1:0 mismatched input '# include "something" program TEST1 { BLAH BLAH ' expecting {'program', '#'}
'# include "something" program TEST1 { BLAH BLAH } ': (program # include "something" program TEST1 { BLAH BLAH } )
BUILD SUCCESSFUL (total time: 0 seconds)

最佳答案

最开始匹配的最长token是QTEXT,匹配文本# include (文本直到但不包括第一个 " 字符),但据报道,此时的有效标记是“程序”和“#”。所以最好避免匹配几乎任何东西的 token 定义。

关于Antlr4:不匹配的输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16364046/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com