Удалить пробелы, но так ли это в прошлом?

Я пытаюсь проанализировать 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'

который является правильным, как вы можете видеть.

Другие вопросы по тегам