Как я могу создать чистое, Python как грамматика в ANTLR?

Комические 303 XKCD - "Компиляция"

('Вы крадете те LCDs?' 'Да, но я делаю его, в то время как мои компиляции кода)

у меня есть прикрепленный к стене, стоящей перед входом в наш офис:)

8
задан Garth Kidd 23 July 2009 в 03:27
поделиться

2 ответа

Я бы позволил вашему токенизатору делать тяжелую работу, а не смешивать правила новой строки в вашей грамматике:

  • Считайте круглые скобки, квадратные скобки и фигурные скобки и не генерируйте токены NL, пока есть незамкнутые группы. Это даст вам бесплатные продолжения строк, даже если ваша грамматика не станет мудрее.

  • Всегда генерируйте токен NL в конце файла независимо от того, заканчивается ли последняя строка символом '\ n' , то вам не нужно беспокоиться об особом случае утверждения без NL. Утверждения всегда заканчиваются NL.

Второй пункт позволит вам упростить вашу грамматику примерно так:

exprlist
    : ( assignment_statement | empty_line )* EOF!
    ;
assignment_statement
    : assignment NL
    ;
empty_line
    : NL
    ;
assignment
    : ID '=' expr
    ;
6
ответ дан 5 December 2019 в 22:20
поделиться

Как насчет этого?

exprlist
    : (expr)? (NL+ expr)* NL!? EOF!
    ;
expr 
    : assignment | ...
    ;
assignment
    : ID '=' expr
    ;
0
ответ дан 5 December 2019 в 22:20
поделиться
Другие вопросы по тегам:

Похожие вопросы: