#1219·antlr4

在 Java 运行时中以毫秒为单位解析的语法,在 Python 中需要数秒时间

作者: pavelvelikhov创建于 2016年6月23日更新于 2026年7月25日
标签target:python3comp:performance

我有一个Python3的语法(取自蚂蚁4语法寄存器),与查询语言构造相扩展. 语法文件在此: [Grammar file] (https://GitHub.com/pavelvelvellikhov/pythonql/blob/master/src/PythonQL.g4).

整个项目在此:PythonQL.

这个微小的程序用毫秒与Java运行时间进行剖析,但是在Python中需要约1.5秒(在最近修复之后,在超过2秒之前).

# 此示例说明了 PythonQL 中的窗口查询

从收藏中导入命名图
贸易 = nametuple (“ 贸易 ” 、 “ 日 ” 、 “ 山 ” 、 “ stock id ”)

贸易 = [贸易(1,15.34, “APPL”),
贸易(2, 13.45, “APPL”),
贸易(3, 8.34, “APPL” ),
贸易(4, 9.87, “APPL”),
贸易(5, 10.99, “APPL” ),
贸易(6, 76.16, “APPL”)]

# 最多三天总和

res = (选择胜出)
用于滑动窗口取胜(在交易中选择 t.ammount )
以 True 开始
只在e时结束(e-s == 2)

印数

以下是一个描述器追踪,以防万一(我只留下了相关的条目):

n calls tott time percall 累计时间 percall 文件名: lineno( 函数)
210.000.000.0.094.004. PythonQLParser.py:7483(辩词)
800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
9 0.000 0.196 0.022 PythonQLParser.py:6836(拖车)
5/3 0.000.000.0.132.0.044 PythonQLParser.py:6765(测试列表 comp)  Py.
1 0000 0000 0.012 0.012 PythonQLParser.py:6154(窗口 end cond)
1 0000 0000 0.057 0.057 PythonQLParser.py:6058(滑行-窗口)
1 0000 0000 0000 0.057 0.057 PythonQLParser.py:5941 (窗口 clause)
10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000:0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
1 0000 0000 0000 0000 020 0000 PythonQLParser.py:5752(用于 clause)
2/1 0.000 0.000 0.068 0.068 PythonQLParser.py:5553(克瑞-表达式)
48/10 0.000.000.0.133 0.013 PythonQLParser.py:5370(原子)
48/7 0.000 0.315 0.045 Python QLParser.py:5283(功率)
48/7 0.000 0.315 0.045 PythonQLParser.py:5212(因子)
48/7 0.000 0.331 0.047 PythonQLParser.py:5132(任期)
47/7 0.000.000.0.346.0.049 PythonQLParser.py:5071(Arith expr) (中文(简体) ).
47/7 0.000.0000.0.361 0.052 PythonQLParser.py:5010(转出)
47/7 0.000.000.0.376 0.054 PythonQLParser.py:4962(和 expr) 互联网档案馆的存檔,存档日期2014-12-02.
47/7 0.000 0.390 0.056 Python QLParser.py:4914(xor expr)
47/7 0.000 0.405 0.058 PythonQLParser.py:4866(外)
44/7 0.000.0000.0.405 0.058 PythonQLParser.py:4823(恒星-外星)
43/7 0.000 0.422 0.060 PythonQLParser.py:4615(非试验)
43/7 0.000.000.0.438.0.063 PythonQLParser.py:4563(并测试)
43/7 0.000 0.453 0.065 PythonQLParser.py:4509(或试验)
第43/7号决议
. . . . . . .