在尝试为PHP7构建新目标时,我遇到了ANTLR4 (用于语言识别的ANother工具)的问题。
首先,我使用以下命令清除已安装的ANTLR3包
apt-get remove --purge antlr antlr-doc libantlr3-runtime-java libantlr-java来自我正在使用的Debian Linux机器。
然后我从github派生并克隆了项目ANTLR4,编写了一个新的运行时PHP7,创建了一个新类PHP7Target作为类Target的子类,并编写了一个合适的PHP7.stg。
然后我用以下命令重新构建了ANTLR4
cd antlr4
export MAVEN_OPTS=-Xmx1G
mvn clean
mvn -DskipTests=true install使用语法T.g4
grammar T;
a
: 'b' #alt1
| 'c' #alt2
;
b : 'x' | 'y' {} ;
e : e '*' e
| 'foo'
;尝试使用以下命令运行ANTLR4
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我遇到了这个错误
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。
有没有人能帮助我,告诉我我的错误在哪里?
发布于 2017-11-07 15:32:58
解决方案:
在文件PHP7target.java中,有一个名为getVersion()的方法。此函数不应返回运行时的版本(即"1.0"),而应返回ANTLR的版本("4.7")。
https://stackoverflow.com/questions/47149809
复制相似问题