我正在使用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
提交
取消