我正在尝试测试 Antlr4 (Oracle) PLSQL 语法,但确实很困难。我可能会因为遵循 2 或 3 个不同的指南而感到困惑。
我在 Ubuntu 22.04 上执行了以下步骤,从安装开始。
安装软件包,但不确定我最终使用了这些:
sudo apt-get update
sudo apt-get -y install python3-antlr4
sudo apt install python3-pip
pip3 install antlr-plsql
pip3 install antlr4-python3-runtime==4.9.3
然后我切换到另一个指南,它看起来更简单且更独立:
mkdir lib
cd lib
curl -O https://www.antlr.org/download/antlr-4.9.3-complete.jar
cd ..
mkdir grammars
cd grammars
wget https://github.com/antlr/grammars-v4/blob/master/sql/plsql/PlSqlLexer.g4
wget https://github.com/antlr/grammars-v4/blob/master/sql/plsql/PlSqlParser.g4
cd ..
wget https://github.com/antlr/grammars-v4/blob/master/sql/plsql/Python3/PlSqlLexerBase.py
wget https://github.com/antlr/grammars-v4/blob/master/sql/plsql/Python3/PlSqlParserBase.py
这给了我:
├── grammars
│ ├── PlSqlLexer.g4
│ └── PlSqlParser.g4
├── lib
│ └── antlr-4.9.3-complete.jar
├── PlSqlLexerBase.py
├── PlSqlParserBase.py
从语法生成 Python 3 模块:
java -jar ./lib/antlr-4.9.3-complete.jar -Dlanguage=Python3 grammars/*g4
结果是很长的错误消息:
error(50): /home/me/try2/grammars/PlSqlLexer.g4:1:0: syntax error:
'{"payload":
{"allShortcutsEnabled":false,"fileTree":
{"sql/plsql":
{"items":
[ {"name":"CSharp","path":"sql/plsql/CSharp","contentType":"directory"},
{"name":"Cpp","path":"sql/plsql/Cpp","contentType":"directory"},
{"name":"Dart","path":"sql/plsql/Dart","contentType":"directory"},
.
.
.
"grammars-v4",
"showInvalidCitationWarning":false,
"citationHelpUrl":"https://docs.github.com/github/creating-cloning-and-archiving-repositories/creating-a-repository-on-github/about-citation-files",
"actionsOnboardingTip":null},
"truncated":false,"viewable":true,"workflowRedirectUrl":null,"symbols":{"timed_out":false,"not_analyzed":true,"symbols":[]}},
"copilotInfo":null,
"copilotAccessAllowed":false,
"csrf_tokens":{"/antlr/grammars-v4/branches":{"post":"B-JVTx4hyskRLh-IIK4rWkAi5MsB-02SSXgjgq9nYNzDI1ZfW5iKO2EvjBCRVSAFlOtcSNnBT47ACuB9TmN_KA"},"/repos/preferences":{"post":"GKOXPKaenoTNYzUHdAFAZKMu0-z4ENu8r5KmHmhUiOKs4HBOuNY9PVTbSAMl7rKPVfBwRCJRpTY72nxBH5PotA"}}},
"title":"grammars-v4/sql/plsql/PlSqlParser.g4 at master · antlr/grammars-v4"}'
came as a complete surprise to me
也尝试过,但得到了相同的结果:
java -Xmx500M -cp "./lib/antlr-4.9.3-complete.jar:$CLASSPATH" org.antlr.v4.Tool -Dlanguage=Python3 grammars/*g4
我能够得到最终生成的Python文件。
我找到了另一组语法文件集
https://github.com/antlr/grammars-v4/tree/master/sql/plsql.
从这里我下载如下:
wget https://github.com/antlr/grammars-v4/blob/master/sql/plsql/Python3/PlSqlLexerBase.py
wget https://github.com/antlr/grammars-v4/blob/master/sql/plsql/Python3/PlSqlParserBase.py
wget https://github.com/antlr/grammars-v4/blob/master/sql/plsql/PlSqlLexer.g4
wget https://github.com/antlr/grammars-v4/blob/master/sql/plsql/PlSqlParser.g4
mv PlSql*g4 grammars
当我跑步时:
java -jar ./lib/antlr-4.9.3-complete.jar -Dlanguage=Python3 grammars/*g4
我在
grammars
中生成了以下内容:
grammars-v4-master PlSqlLexer.interp PlSqlParserBase.py PlSqlParserListener.py __pycache__
master.zip PlSqlLexer.py PlSqlParser.g4 PlSqlParser.py runPLSQL.py
PlSqlLexer.g4 PlSqlLexer.tokens PlSqlParser.interp PlSqlParser.tokens