2013-07-10 2 views
0

Я хотел бы написать правило грамматики природы:Есть ли способ указать один или несколько в грамматике PLY?

program = { expression } 

где {} обозначает 1 или более.

Например, грамматика Lua использует тот же синтаксис:

chunk ::= {stat [`;´]} [laststat [`;´]] 

Возможно ли это? Соответствует ли это грамматике контекстной свободы?

ответ

1

Я считаю, самое лучшее простое решение:

program : expression 
     | program NEWLINE expression 

Это работает только так PLY генерирует LR-грамматик, нетерминальный не может начать с себя (слева -recursion) в LL грамматик (если вы использовали такие инструменты, как ANTLR)

вы также можете сделать:

program : expression 
     | expression NEWLINE program 

Эта вторая версия хороша, потому что она совместима как с LL, так и с LR-грамматиками, но я считаю, что первое правило более эффективно для парсера LR.

+0

Спасибо, это полезно! – sdasdadas

0

Я нашел ответ:

program : expression 
     | expression NEWLINE expression 
Смежные вопросы