当前位置: 首页 > 知识库问答 >
问题:

ANTRL4:无法让Python ANTLR生成解析树的图形

白高逸
2023-03-14

我有一个简单的HelloWorld。g4语法(见底部)。我能够成功生成<代码>。py文件使用:

set CLASSPATH=.;antlr-complete.jar;%CLASSPATH%

java org.antlr.v4.Tool -Dlanguage=Python2 HelloWorld.g4

现在我想使用带有-gui标志的TestRig来生成解析树GUI。我安装了ANTRL Python运行时(antlr4-python2-runtime-4.5.tar.gz)。我可以打开一个Python解释器并键入:

import antlr4

并且解释器识别出 antlr4 模块。

当我像这样运行< code>TestRig时:

set CLASSPATH=.;antlr-complete.jar;%CLASSPATH%

java org.antlr.v4.gui.TestRig HelloWorld message -gui < input.txt

我收到此错误消息

Can't load HelloWorld as lexer or parser

从我的调查中,我发现了几篇列出相同错误消息的帖子。但是,在这些情况下,他们忘记在类路径中包含句点 (.)。但正如你所看到的,我已经把它包括在我的类路径中。

我不知道如何让< code>TestRig工作。注意:当目标语言是Java时,让< code>TestRig使用相同的< code>HelloWorld语法没有问题。

您能提供的任何帮助将不胜感激。

你好世界. g4

grammar HelloWorld;   

options { language=Python; }            

message   : GREETING NAME;

GREETING : 'Hello' ;    
NAME     : [a-zA-Z]+ ;                      
WS       : [ \t\r\n]+ -> skip ; 

共有1个答案

慕容灿
2023-03-14

今天也遇到了这个问题:问题是testrig需要生成的java源代码。但是因为你在Python上,所以除非你明确运行antlr4两次,否则你没有它:一次用于目标语言Python2(或3),一次用于-DLanguage=java

请看这个答案,它建议首先运行< code>language=java目标。然后对问题本身进行注释来编译java文件

为了完整起见,在忘记之前:确保您的< code>$CLASSPATH env变量设置为包含点< code > ' . '以及< code>antlr*的路径。jar文件。例如,在unix上:

export CLASSPATH=".:/<Mydirectory>/antlr-4.2.2-complete.jar:$CLASSPATH"

以下是一步一步来,我想一旦$CLASSPATH设置正确,您必须执行的操作:

为java编译:

> antlr4 -Dlanguage=Java HelloWorld.g4
# or:  java org.antlr.v4.Tool -Dlanguage=Java HelloWorld.g4

请注意,我的语法文件中有< code > options { language = python 3 } ,而< code>-D覆盖没有按预期工作。所以我删除了选项块,现在在命令行上指定语言目标。

然后将 *.java 文件编译为 *.class 文件:

> javac -g *.java

然后运行测试台:

> grun HelloWorld message
# or: java org.antlr.v4.gui.TestRig HelloWorld message -gui < input.txt
 类似资料:
  • 问题内容: 我有一个简单的语法(请参阅底部)。我能够使用以下命令成功生成文件: 现在,我想使用带有标志的来生成解析树GUI。我已经安装了ANTRL Python运行时()。我可以打开Python解释器并输入: 然后解释器识别模块。 当我这样运行时: 我收到此错误消息: 从我的调查中,我发现了几则帖子列出了相同的错误消息。但是,在这些情况下,他们忘记在类路径中包含句点(。)。但是正如您所看到的,我已

  • 最小生成树英文是Minimum Spanning Tree,对于最小生成树大家应该都不陌生,当然还有最大生成树,首先就简单总结一下算法里的生成树。 一、什么是生成树? Spanning有跨越的意思,生成树一般来说每个节点都能访问到别的节点,是一个连通树。所以,一般考虑无向图里去造生成树。生成树又分最小和最大两种,其中最小生成树应用比较多。总结一下生成树的定义: 1. 首先它得是一个树的结构 2.

  • 无向图最小生成树的Prim算法 思路说明 假设点A,B,C,D,E,F,两点之间有连线的,以及它们的距离分别是:(A-B:7);(A-D:5);(B-C:8);(B-D:9);(B-E:7);(C-E:5);(D-E:15);(D-F:6);(E-F:8);(E-G:9);(F-G:11) 关于Prim算法的计算过程,参与维基百科的词条:普里姆算法 将上述点与点关系以及两点之间距离(边长,有的文献

  • 最小生成树的Kruskal算法 描述:有A、B、C、D四个点,每两个点之间的距离(无方向)是(第一个数字是两点之间距离,后面两个字母代表两个点):(1,’A’,’B’),(5,’A’,’C’),(3,’A’,’D’),(4,’B’,’C’),(2,’B’,’D’),(1,’C’,’D’) 生成边长和最小的树,也就是找出一种连接方法,将各点连接起来,并且各点之间的距离和最小。 思路说明: Krusk

  • 本篇主要图文讲解最小生成树的实现和算法。 一、最小生成树 最小生成树(minimum spanning tree)是由n个顶点,n-1条边,将一个连通图连接起来,且使权值最小的结构。最小生成树可以用Prim(普里姆)算法或kruskal(克鲁斯卡尔)算法求出。 此外还可以用bfs和dfs生成,分别叫bfs生成树和dfs生成树。 例: 二、Prim(普里姆)算法 这里就采用的是邻接矩阵存储的,Pri

  • 我试图从这个地址: 服务器转移。co/api/v1 使用OKHttp库。运行以下代码后: 我收到以下警告,我无法解决。 JAVA网UnknownHostException:无法解析主机“server staging.co/api/v1”:没有与主机名关联的地址