我们正在尝试在树莓派B上使用Antlr4(Python2目标)解析自定义语言。然而,它太慢了,无法进行任何严肃的操作:解析几行需要大约十秒钟。这是我的代码:
Transposeur.py:
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()
。有没有办法让它更快?