簡體   English   中英

如何在 Windows 上為 Python3 安裝 antlr4

[英]How do I install antlr4 for Python3 on Windows

我正在嘗試在 Windows 上為 Python 3 安裝 antlr4。 我成功運行以下pip命令:

pip install antlr4-python3-runtime

安裝包,沒問題。 我正在使用 Miniconda 環境,文件在預期的位置。

但是,當我嘗試從命令行運行antlr4時,會返回錯誤:

'antlr4' is not recognized as an internal or external command, operable program or batch file

我已經驗證了我的路徑變量是否符合預期......並且我在 Miniconda 環境中運行通過 pip 安裝的其他軟件包沒有問題。 我還嘗試通過 CMD 安裝到 Windows 上的主要 Python 安裝,它安裝沒有問題……但是當我嘗試運行時,響應相同。 我也嘗試在我的 Mac 上執行此操作,同樣的問題。

我假設 antlr4 構建存在問題,但我想確保在繼續之前我沒有遺漏任何東西。

更新 0 @Bart 的答案是要走的路,但現在我在運行 .jar 文件時遇到了問題。 它拋出一個錯誤,說我的 Java 已過時(我的 mon 類文件版本為 52,它需要 55)。 但我有 Java 1.8,應該比這更高。 這是下面的錯誤:

C:\Users\mathg>java -jar C:\Users\mathg\miniconda3\Scripts\antlr-4.10.1-complete.jar -help
Error: A JNI error has occurred, please check your installation and try again
Exception in thread "main" java.lang.UnsupportedClassVersionError: org/antlr/v4/Tool has been compiled by a more recent version of the Java Runtime (class file version 55.0), this version of the Java Runtime only recognizes class file versions up to 52.0
        at java.lang.ClassLoader.defineClass1(Native Method)
        at java.lang.ClassLoader.defineClass(Unknown Source)
        at java.security.SecureClassLoader.defineClass(Unknown Source)
        at java.net.URLClassLoader.defineClass(Unknown Source)
        at java.net.URLClassLoader.access$100(Unknown Source)
        at java.net.URLClassLoader$1.run(Unknown Source)
        at java.net.URLClassLoader$1.run(Unknown Source)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(Unknown Source)
        at java.lang.ClassLoader.loadClass(Unknown Source)
        at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
        at java.lang.ClassLoader.loadClass(Unknown Source)
        at sun.launcher.LauncherHelper.checkAndLoadMain(Unknown Source)

更新 1我做了更多的挖掘工作,並按照此處的安裝說明進行操作: antlr4: Getting Started 更新了所有環境變量,根據需要創建了 .bat 文件,然后我再次運行......但即使它現在在我的 PATH 上,仍然是同樣的錯誤。 我的 Java 安裝可能有些問題,但我確實重新安裝了。 我確實在 GitHub 上找到了類似的問題,但似乎已解決。 相關的 antlr4 GitHub 問題

更新 2我運行 antlr4 .jar 文件的問題的答案是重新安裝早期版本的 Java。 這完全解決了它。 如果還有其他人正在進入這個兔子洞,請查看我發布的 GitHub 問題鏈接。

antlr4不是antlr4-python3-runtime附帶的二進制文件。 它只是命令的別名:

java -jar /usr/local/lib/antlr-4.10.1-complete.jar

換句話說,當您想從.g4語法文件生成解析器時,您需要下載antlr-4.10.1-complete.jar文件並安裝 Java 運行時。 您只需要 Java 來生成解析器類,之后您需要 Python 運行時類來使用這些生成的解析器類。

例如,您有一個名為MyLanguage.g4的語法:

grammar MyLanguage;

parse
 : GREET NAME EOF
 ;

GREET : 'Hi' | 'Hello';
NAME  : [a-zA-Z]+;
SPACE : [ \t\r\n] -> skip;

那么這就是你必須做的:

  1. 生成解析器類:
java -jar antlr-4.10.1-complete.jar MyLanguage.g4 -Dlanguage=Python3

這將生成MyLanguageLexer.pyMyLanguageParser.py (和一些監聽器類)。

  1. 使用詞法分析器和解析器:
from antlr4 import *
from MyLanguageLexer import MyLanguageLexer
from MyLanguageParser import MyLanguageParser

if __name__ == '__main__':
    lexer = MyLanguageLexer(InputStream('Hi Trekkie'))
    parser = MyLanguageParser(CommonTokenStream(lexer))
    parse_tree = parser.parse()
    print(parse_tree.toStringTree(recog=parser))

上面的腳本只需要您使用antlr4-python3-runtime安裝的庫(並且正在使用from antlr4 import * )。 如果您運行此腳本,將打印以下內容:

(parse Hi Trekkie <EOF>)

“此版本的 Java 運行時僅識別最高 52.0 的類文件版本”上面的錯誤消息表示您的 java 版本是 java 8 或 java 1.8,而不是 java 18 或稱為 java 18,它們是兩個不同的版本

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM