Antlr4在覆盆子上生长缓慢

2024-09-30 03:24:10 发布

您现在位置:Python中文网/ 问答频道 /正文

我们试图用Antlr4(Python2目标)解析raspberrypib上的自定义语言。不过,解析任何东西都要花上10秒钟的时间。这是我的代码:

在转置器.py公司名称:

# -*- coding:Utf-8 -*-

from antlr4 import *
from TransposeurLexer import TransposeurLexer
from TransposeurParser import TransposeurParser
import sys
from Listener import Listener

def transpose(file_path):

  input = FileStream(file_path)
  lexer = TransposeurLexer(input)
  stream = CommonTokenStream(lexer)
  parser = TransposeurParser(stream)
  tree = parser.myfile()
  listener = Listener()
  walker = ParseTreeWalker()
  walker.walk(listener, tree)
  return listener.array

Transposeur.g4:

^{pr2}$

需要时间的命令是tree = parser.myfile()。有什么方法可以让事情更快些吗?在


Tags: pathfromimporttreeparserinputstream时间
1条回答
网友
1楼 · 发布于 2024-09-30 03:24:10

我怀疑它在解决low+vs(low | cap)*…..的案例时遇到了困难,在这些案例中,它可能不得不任意地向前看,以确定适用哪种减少。在

我认为真正的问题是,你的单位+参照相对于低+是模棱两可的。给出一个单元的文本,包括:

      aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa

(五十个a)。我们可以用以下方法进行分析:

  • a单位所有“a”的低+
  • 单位单位第一个低+是任何前缀,第二个低+是其余“a”的(即2500种可能性)
  • 单位单位单位任何前缀的第一个低+,任何剩余后缀的最后一个低+,以及中低+ 介于(方式,更多可能性)
  • 单位单位单位单位。。。在

所以我认为你的这部分语法非常模糊,ANTLR正在探索巨大的选择空间,试图选择一个。你可能是 幸运的是,ANTLR足够快的完成了:-}

使用单位+上限(==上限+)也会遇到同样的问题。在

我不清楚一个单位有多少结构需要你去捕捉。在我看来你只是想要一根绳子。 尝试将其重新编码为:

^{pr2}$

更好的方法是这样定义单元:

unit: LOW | CAP | PONCT | DIGIT | SPACE ;

相关问题 更多 >

    热门问题