Удалить пробелы, но так ли это в прошлом?
Я пытаюсь проанализировать Lua, который в некоторых случаях зависит от пробелов, поскольку он не использует скобки для области видимости. Я полагаю, что выбрасывать пробелы, только если другое правило не соответствует, является лучшим способом, но я понятия не имею, как это сделать. Кто-нибудь может мне помочь?
1 ответ
Глядя на документацию Lua, я не вижу необходимости учитывать пробелы.
Правило парсера ifStatement
:
ifStatement
: 'if' exp 'then' block ('elseif' exp 'then' block 'else' block)? 'end'
;
exp
: /* todo */
;
block
: /* todo */
;
должно соответствовать обоим:
if j==10 then print ("j equals 10") end
а также:
if j<10 then
print ("j < 10")
elseif j>100 then
print ("j > 100")
else
print ("j >= 10 && j <= 100")
end
Не нужно учитывать пробелы, AFAIK. Так что вы можете просто добавить:
Space
: (' ' | '\t' | '\r' | '\n'){$channel=HIDDEN;}
;
в вашей грамматике.
РЕДАКТИРОВАТЬ
Кажется, в вики ANTLR есть грамматика Lua: http://www.antlr.org/grammar/1178608849736/Lua.g
И, похоже, мое предложение для оператора if немного отличается от приведенной выше грамматики:
'if' exp 'then' block ('elseif' exp 'then' block)* ('else' block)? 'end'
который является правильным, как вы можете видеть.