我正在使用https://github.com/antlr/grammars-v4/blob/master/python/tiny-python/tiny-grammar-without-actions/Python3.g4语法,我想添加一个规则来跳过空行(第 6 行)a = 0b = 2sum = 0if b > a: i = b sum += iprint(sum)我已经测试了这段代码,但对我不起作用WS:[ \t\r\n]+ -> skip;line 8:4 : missing NEWLINE at 'sum'编辑:ss = 4if 3>1: ss = 3 #dddd ss = 4当我添加上面的代码时,它会报告另一个错误line 4:9 : extraneous input '\n ' expecting {'break', 'continue', 'if', 'while', 'for', 'print', 'def', 'return', NAME, '(', DEDENT}
1 回答

森栏
TA贡献1810条经验 获得超5个赞
通过这样做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不会被删除。
添加回答
举报
0/150
提交
取消