java - 为什么 ANTLR 不能正确打印标记集?
问题描述
我正在测试 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.greeting
and开头,HelloExample.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 在评论中已经指出的那样,在令牌输出中获取实际规则名称而不是它们的编号是一项功能,您不必担心。
为了在(greeting Hello World !)
最后获得输出,您需要-tree
在-tokens
.
推荐阅读
- python - 如何使用 turtle 绘制圆的第 n 部分;即,任何所需图形的四分之一圆的半圆
- python - 如何从数据框中的列末尾删除所有出现的子字符串?
- opc-ua - 使用 MonitoringMode.Sampling 时如何访问订阅数据?
- apache-kafka - 在 ksqlDB 中创建的流显示 NULL 值
- report - 哪个 DocuSign 报告用于生成只有未删除的信封的报告?
- object - 如何获取边界框外对象的像素值和坐标 - Yolov5?
- graphql-codegen - 如何在 RTK-Query 插件中向端点添加标头?
- vue.js - Vue路由器-使用router.push()时跳过导航守卫
- ios - SwiftUI - ObservedObject 永远不会被释放
- elasticsearch - Elasticsearch 查询父字段和子字段