antlr4 表达式分隔符带有 ' '并让解析器忽略' ' 就像 Kotlin 中那样

问题描述 投票:0回答:1

我用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]+;

会有所帮助,但我刚刚遇到了很多解析错误

parsing newline antlr4 lexer
1个回答
0
投票

-> 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
 ;
© www.soinside.com 2019 - 2024. All rights reserved.