我正在使用 https://github.com/antlr/grammars-v4/blob/master/python/tiny-python/tiny-grammar-without-actions/Python3.g4
语法,我想添加一个规则来跳过空行(行:6(
a = 0
b = 2
sum = 0
if b > a:
i = b
sum += i
print(sum)
我已经测试了这段代码,但对我不起作用
WS:[ trn]+ -> skip;
line 8:4 : missing NEWLINE at 'sum'
编辑:
ss = 4
if 3>1:
ss = 3
#dddd
ss = 4
当我添加上面的代码时,它会报告另一个错误
line 4:9 : extraneous input 'n ' expecting {'break', 'continue', 'if', 'while', 'for', 'print', 'def', 'return', NAME, '(', DEDENT}
通过执行WS:[ trn]+ 'n'-> skip;
,您实际上是在删除(跳过(i = b
之后的新行和之后的空行:
i = b
sum += i
结果是:
i = b sum += i
这不好:您需要在i = b
之后换一行.
您可以尝试让空行成为NEWLINE
令牌的一部分,而不是跳过空行。因此,与其这样做:
NEWLINE
: ( 'r'? 'n' | 'r' | 'f' ) SPACES?
;
你会做:
NEWLINE
: ( 'r'? 'n' | 'r' | 'f' ) (SPACES? ( 'r'? 'n' | 'r' | 'f' ))* SPACES?
;
这将确保不会删除i = b
之后的新行。