Tiny python 添加跳过空行规则,Antlr4

Tiny python add skip blank line rule, Antlr4

我正在使用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:[ \t\r\n]+ -> 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:[ \t\r\n]+ '\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 之后的新行不会被删除。