gpt4 book ai didi

java - 为什么 ANTLR 没有正确打印 token 集?

转载 作者:行者123 更新时间:2023-12-01 16:51:46 25 4
gpt4 key购买 nike

我正在使用我的教授提供的示例来测试 ANTLR-4.7.1 是否正常工作,以匹配相同打印标记集的这些结果:

% java  -jar ./antlr-4.7.1-complete.jar HelloExample.g4
% javac -cp antlr-4.7.1-complete.jar HelloExample*.java
% java -cp .:antlr-4.7.1-complete.jar org.antlr.v4.gui.TestRig HelloExample greeting helloworld.greeting -tokens
[@0,0:4='Hello',<1>,1:0]
[@1,6:10='World',<3>,1:6]
[@2,12:12='!',<2>,1:12]
[@3,14:13='<EOF>',<-1>,2:0]
(greeting Hello World !)

但是,在执行第三个命令后,我的输出是:

[@0,0:4='Hello',<'Hello'>,1:0]
[@1,6:10='World',<Name>,1:6]
[@2,12:12='!',<'!'>,1:12]
[@3,13:12='<EOF>',<EOF>,1:13]

在我的输出中,< > 内没有数字,我认为应该从包含以下内容的 HelloExample.tokens 文件中定义:

Hello=1
Bang=2
Name=3
WS=4
'Hello'=1
'!'=2

我没有收到错误信息,antlr 似乎已经生成了我需要的所有文件,所以我不知道应该在哪里解决这个问题,请帮忙。我不确定它是否有用,但我的工作目录以 helloworld.greetingHelloExample.g4 开始,最终目录现在包含

helloworld.greeting
HelloExample.g4
HelloExample.interp
HelloExample.tokens
HelloExampleBaseListener.class
HelloExampleBaseListener.java
HelloExampleLexer.class
HelloExampleLexer.inerp
HelloExampleLexer.java
HelloExampleLexer.tokens
HelloExampleListener.class
HelloExampleListener.java
HelloExampleParser$GreetingContext.class
HelloExampleParser.class
HelloExampleParser.java

最佳答案

正如 rici 已经在评论中指出的那样,在 token 输出中获取实际的规则名称而不是它们的编号是一项功能,您不必担心。

为了在最后获得 (greeting Hello World !) 输出,您需要在 -tokens< 之后添加 -tree 标志.

关于java - 为什么 ANTLR 没有正确打印 token 集?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61670559/

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