我有一个简单的ANTLR4语法如下:
grammar Foo;
block
: statement+
;
statement
: expression
;
expression
: literal
| op=('+' | '-') expression
| expression op=('*' | '/' | '%') expression
| expression op=('-' | '+') expression
;
literal
: NUM
;
NUM
: INT+
| INT* '.' INT+
;
fragment
INT
: ('0'..'9')+
;
WS
: (' ' | '\t' | '\r' | '\n' ) -> skip
;
当我使用这个语法解析时,例如" -1 + -84 - -2 * -1 / -2 * -1 - 1 + 1 / -1"作为使用为JavaScript生成的解析器的块,它非常慢(大约为500毫秒,对于更大的表达式则更长)。另一方面,当我将其解析为表达式时,它会在大约一毫秒内解析。最后,如果我修改语法以便语句由分号分隔,解析上面的输入(用分号添加到结尾)作为一个块大约需要一毫秒。
有没有办法可以构造这个语法,以便语句以空格分隔,并确保上述语句块能够快速解析?