0
有沒有辦法在我需要它們之前跳過令牌?爲了更清楚,這裏是一個語法是儘可能接近我能得到我想要的東西:antlr如何在我需要它之前跳過令牌
grammar example;
file : statement* EOF ;
statement : ID EOL
| '{' (EOL statement*)? '}' EOL
;
EOL : ('\r'? '\n' | '\r') -> skip ;
WHITESPACE : [ \t]+ -> skip ;
希望我的意圖是明確的:所有的空格(包括換行符)是正常情況下跳過,但我可以要求每當我想換行的存在,所以
foo
{
bar
}
baz
將符合語法,但不
foo {
bar
} baz
或
foo bar
{
baz
}
有沒有辦法做到這一點,或者我只需要在我的語法中輸入很多EOL*
?
背後的語義目的是什麼?1)「跳過令牌」和2)對語法強加空白要求?如果你能解釋這些要求,這可能會有幫助,因爲它們在我的經驗中是獨一無二的。 – TomServo
@TomServo @TomServo跳過一個標記的目的是爲了它不會被收集到標記中(或者至少,這些標記被丟棄),並且強制空白的意義在於像Swift這樣的東西,在正常情況下,所有的空白都被忽略所以'a = b * 2'和'a = b * 2'相同),但是你可以說一個語句的結尾可以是';'或者行尾,所以你不總是必須寫';'。 – Anonymous