我使用以下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文件来克服这个和类似的错误:

  1. :false替换为:False
  2. :true替换为:True
  3. :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

推荐答案

判断您为其下载的文件

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

They should be very small Python scripts, but you seem to have somehow got the github JSON file list. Maybe your wget comm和 needs looking at.

Python相关问答推荐

如何使用matplotlib在Python中使用规范化数据和原始t测试值创建组合热图?

有症状地 destruct 了Python中的regex?

使可滚动框架在tkinter环境中看起来自然

Vectorize多个头寸的止盈/止盈回溯测试pythonpandas

运行终端命令时出现问题:pip start anonymous"

用Python解密Java加密文件

log 1 p numpy的意外行为

通过pandas向每个非空单元格添加子字符串

为什么以这种方式调用pd.ExcelWriter会创建无效的文件格式或扩展名?

如何让这个星型模式在Python中只使用一个for循环?

NumPy中条件嵌套for循环的向量化

LocaleError:模块keras._' tf_keras. keras没有属性__internal_'''

从嵌套极轴列的列表中删除元素

如何获得3D点的平移和旋转,给定的点已经旋转?

数据框,如果值在范围内,则获取范围和

按条件添加小计列

使用np.fft.fft2和cv2.dft重现相位谱.为什么结果并不相似呢?

启动线程时,Python键盘模块冻结/不工作

Pandas 删除只有一种类型的值的行,重复或不重复

在不中断格式的情况下在文件的特定部分插入XML标签