我用antlr4做语法,遇到了表达式分离的问题 我需要能够像 Kotlin、Swift 或 JavaScript 中那样将表达式与下一行分开 例如:
a = 5
b = 10
c = a + b
这里,每一行都是新的表达式,通过下一行字符 ' 与其他表达式分隔开 ' 但我也想要,' ' 不要像这样分隔不完整的表达式
a =
10 + 15
其中
a = 10 + 15
是整个表达式
我怎样才能做到?
我上网冲浪,但没有找到拐杖解决方案((( 我想更换
Int : [0-9]+;
WS: [ \t\n\r\f]+ -> skip;
像这样的东西
Int : [0-9]+ WS;
WS: [ \t\n\r\f]+;
会有所帮助,但我刚刚遇到了很多解析错误
从
-> skip
规则中删除 WS
还会导致空格和制表符添加到令牌流中。这意味着您需要将 WS
添加到所有解析器规则中:
expression
: expression WS? ('+' | '-') WS? expression
...
| Int
;
这会变得一团糟。
最好只允许换行,并保留
skip
ping 空格和制表符:
NL : '\r'? '\n';
WS : [ \t]+ -> skip;
然后做这样的事情:
parse
: NL* statement (NL+ statement)* NL* EOF
;
statement
: assignment
...
;
assignment
: ID '=' expression
;