我使用以下Antlr4 PLSQL语法文件:
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
wget https://www.antlr.org/download/antlr-4.13.1-complete.jar
mv antlr-4.13.1-complete.jar lib
给我:
├── lib
│ ├── antlr-4.13.1-complete.jar
├── grammars1
│ ├── PlSqlLexer.g4
│ └── PlSqlParser.g4
├── PlSqlLexer.g4
├── PlSqlParser.py
当我接着跑的时候:
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
然后,我创建runPLSQL.py Python脚本:
cd grammars
python3 runPLSQL.py ../../plsql/test.sql
但这一点是错误的:
import pandas
Traceback (most recent call last):
File "/home/me/try2/grammars/runPLSQL.py", line 11, in <module>
from PlSqlParserListener import PlSqlParserListener
File "/home/me/try2/grammars/PlSqlParserListener.py", line 6, in <module>
from PlSqlParser import PlSqlParser
File "/home/me/try2/grammars/PlSqlParser.py", line 14, in <module>
from PlSqlParserBase import PlSqlParserBase
File "/home/me/try2/grammars/PlSqlParserBase.py", line 1, in <module>
{"payload":{"allShortcutsEnabled":false,"fileTree":{"sql/plsql/Python3":{"items":[{"name":"PlSqlLexerBase.py","path":"sql/plsql/Python3/PlSqlLexerBase.py","contentType":"file"}
NameError: name 'false' is not defined. Did you mean: 'False'?
我不得不编辑如下的PlSqlLexerBase.py
文件来克服这个和类似的错误:
- 将
:false
替换为:False
- 将
:true
替换为:True
- 将
:null
替换为:None
但现在我明白了:
import pandas
Traceback (most recent call last):
File "/home/me/try2/grammars/runPLSQL.py", line 11, in <module>
from PlSqlParserListener import PlSqlParserListener
File "/home/me/try2/grammars/PlSqlParserListener.py", line 6, in <module>
from PlSqlParser import PlSqlParser
File "/home/me/try2/grammars/PlSqlParser.py", line 14, in <module>
from PlSqlParserBase import PlSqlParserBase
ImportError: cannot import name 'PlSqlParserBase' from 'PlSqlParserBase' (/home/me/try2/grammars/PlSqlParserBase.py)
PlSqlParserBase.py
个脚本开始于:
{"payload":{"allShortcutsEnabled":False,"fileTree":{"sql/plsql/Python3":{"items":[{"name":"PlSqlLexerBase.py","path":"sql/plsql/Python3/PlSqlLexerBase.py","contentType":"file"},{"name":"PlSqlParserBase.py","path":"sql/plsql/Python3/PlSqlParserBase.py","contentType":"file"}],"totalCount":2},"sql/plsql":{"items":[{"name":"CSharp","path":"sql/plsql/CSharp","contentTy......
我注意到它引用了相对路径名,所有的路径/文件都应该存在吗?
runPLSQL.py
个脚本的顶部是:
import os
import pandas
from antlr4 import InputStream, ParseTreeWalker
from antlr4.CommonTokenStream import CommonTokenStream
from pandas import DataFrame
#from PlSql.grammar.PlSqlListener import PlSqlListener
#from PlSql.grammar.PlSqlLexer import PlSqlLexer
#from PlSql.grammar.PlSqlParser import PlSqlParser
from PlSqlParserListener import PlSqlParserListener
from PlSqlLexer import PlSqlLexer
from PlSqlParser import PlSqlParser
from tabulate import tabulate
class SQLParser(PlSqlListener):
我还查看了自动生成的master.zip
,它包含了被删除的文件名,尽管路径不完全相同:
unzip -l master.zip | grep PlSql
896 2024-02-20 11:13 grammars-v4-master/sql/plsql/CSharp/PlSqlLexerBase.cs
720 2024-02-20 11:13 grammars-v4-master/sql/plsql/CSharp/PlSqlParserBase.cs
367 2024-02-20 11:13 grammars-v4-master/sql/plsql/Cpp/PlSqlLexerBase.h
614 2024-02-20 11:13 grammars-v4-master/sql/plsql/Cpp/PlSqlParserBase.h
109954 2024-02-20 11:13 grammars-v4-master/sql/plsql/Dart/PlSqlLexer.g4
358 2024-02-20 11:13 grammars-v4-master/sql/plsql/Dart/PlSqlLexerBase.dart
149085 2024-02-20 11:13 grammars-v4-master/sql/plsql/Dart/PlSqlParser.g4
571 2024-02-20 11:13 grammars-v4-master/sql/plsql/Dart/PlSqlParserBase.dart
354 2024-02-20 11:13 grammars-v4-master/sql/plsql/Java/PlSqlLexerBase.java
610 2024-02-20 11:13 grammars-v4-master/sql/plsql/Java/PlSqlParserBase.java
259 2024-02-20 11:13 grammars-v4-master/sql/plsql/JavaScript/PlSqlLexerBase.js
506 2024-02-20 11:13 grammars-v4-master/sql/plsql/JavaScript/PlSqlParserBase.js
115277 2024-02-20 11:13 grammars-v4-master/sql/plsql/PlSqlLexer.g4
228726 2024-02-20 11:13 grammars-v4-master/sql/plsql/PlSqlParser.g4
157 2024-02-20 11:13 grammars-v4-master/sql/plsql/Python3/PlSqlLexerBase.py
364 2024-02-20 11:13 grammars-v4-master/sql/plsql/Python3/PlSqlParserBase.py
334 2024-02-20 11:13 grammars-v4-master/sql/plsql/TypeScript/PlSqlLexerBase.ts
604 2024-02-20 11:13 grammars-v4-master/sql/plsql/TypeScript/PlSqlParserBase.ts