ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

python – Antlr4在RaspberryPi上运行缓慢

2019-08-29 23:57:38  阅读:330  来源: 互联网

标签:antlr4 python raspberry-pi parsing antlr


我们正在尝试使用Antlr4(Python2目标)在RaspberryPi B上解析自定义语言.但是,做任何严肃的事情都太慢了:解析几行需要大约十秒钟.这是我的代码:

Transposeur.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:

grammar Transposeur;

myfile: block+;

block: title
     | paragraph
     ;

title: firstTitle
     | secondTitle
    ;

firstTitle: '#' ' '? unit+ newline;
secondTitle: '##' ' '? unit+ newline;

paragraph: unit+ newline;

unit: low+
    | upper
    | (low | cap)* cap (low | cap)*
    | ponctuation
    | number
    | space
    ;

upper: cap cap+;
number: digit+;

low: LOW;
cap: CAP;
newline: NEWLINE;
ponctuation: SPACE? PONCT;
space: SPACE;
digit: DIGIT;

LOW: [a-z] | 'ç' | 'é' | 'è' | 'à' | 'â' | 'ê' | 'ù' | 'î' | 'ô' | 'û' | 'ë' | 'ï' | 'ü' | 'œ';
CAP: [A-Z];
NEWLINE: '\r'? '\n';
SPACE: ' ';
DIGIT: [0-9];
PONCT: ',' | '!' | '?' | ';' | '.' | ':';

花费时间的命令是tree = parser.myfile().有没有办法让事情变得更快?

解决方法:

我怀疑它在解决低vs(低| cap)* ….的情况下遇到困难,因为它可能需要在任意前方任意查看以确定应用哪种减少.

我认为真正的问题是你的单位参考在低位时是模棱两可的.鉴于单位的文本包括:

      aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa

(五十“a”).人们可以用以下方法解析:

>一个单位低于所有“a”的单位,
>单位单位,任何前缀的第一个低位,以及“a”的其余部分的第二个低位(即2500个可能性)
>单位单位单位,任何前缀的第一个低位,任何剩余后缀的最后一个低位,以及中位数的中间低位
之间(方式,方式更多的可能性)
>单位单位单位…

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

单位和上限(==上限)也会遇到同样的问题.

我不清楚你真正需要捕获的单位结构有多少.它看起来像你只是想要一个字符串.
尝试将其重新编码为:

unit: low
    | cap
    | ponctuation
    | number
    | space
  ; 

更好的是,以这种方式定义单位:

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

标签:antlr4,python,raspberry-pi,parsing,antlr
来源: https://codeday.me/bug/20190829/1764394.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有