首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ANTLR:代码生成目标需要ANTLR 4.7;它无法由当前的ANTLR 1.0加载

ANTLR:代码生成目标需要ANTLR 4.7;它无法由当前的ANTLR 1.0加载
EN

Stack Overflow用户
提问于 2017-11-07 12:06:05
回答 1查看 2.3K关注 0票数 0

在尝试为PHP7构建新目标时,我遇到了ANTLR4 (用于语言识别的ANother工具)的问题。

首先,我使用以下命令清除已安装的ANTLR3包

代码语言:javascript
复制
apt-get remove --purge antlr antlr-doc libantlr3-runtime-java libantlr-java

来自我正在使用的Debian Linux机器。

然后我从github派生并克隆了项目ANTLR4,编写了一个新的运行时PHP7,创建了一个新类PHP7Target作为类Target的子类,并编写了一个合适的PHP7.stg。

然后我用以下命令重新构建了ANTLR4

代码语言:javascript
复制
cd antlr4
export MAVEN_OPTS=-Xmx1G
mvn clean    
mvn -DskipTests=true install

使用语法T.g4

代码语言:javascript
复制
grammar T;

a
    : 'b'   #alt1
    | 'c'   #alt2
    ;

b : 'x' | 'y' {} ;

e : e '*' e
  | 'foo'
  ;

尝试使用以下命令运行ANTLR4

代码语言:javascript
复制
export CLASSPATH=~/.m2/repository/org/antlr/antlr4/4.7.1-SNAPSHOT/antlr4-4.7.1-SNAPSHOT-complete.jar:$CLASSPATH
cd ~/.m2/repository/org/antlr/antlr4/4.7.1-SNAPSHOT
java -jar ./antlr4-4.7.1-SNAPSHOT-complete.jar /tmp/T.g4 -Dlanguage=PHP7

我遇到了这个错误

代码语言:javascript
复制
error(35):  PHP7 code generation target requires ANTLR 4.7; it can't be loaded by the current ANTLR 1.0

错误显示两次。

如果没有这个选项,ANTLR将完成自己的工作,并为语法创建-Dlanguage=PHP7文件。

不幸的是,我不理解这个错误信息。似乎这个包正在使用一个旧的ANTLR版本,在这种情况下,我不知道如何将ANTLR升级到版本4。

有没有人能帮助我,告诉我我的错误在哪里?

EN

回答 1

Stack Overflow用户

发布于 2017-11-07 15:32:58

解决方案:

在文件PHP7target.java中,有一个名为getVersion()的方法。此函数不应返回运行时的版本(即"1.0"),而应返回ANTLR的版本("4.7")。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47149809

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档