Почему в моей крошечной грамматике три конфликта синтаксического анализа? - PullRequest
0 голосов
/ 03 марта 2011
//complete
start ::= template.

//template
template ::= template_elements.
template ::= template template_elements.
template ::= .

//template elements
template_elements(res) ::= COMMENT. 
template_elements(res) ::= tag(t). 

//tag
tag(res) ::= LDEL exp(e) RDEL. 

//exp
exp(res) ::= value(v). 
exp(res) ::= exp(e1) OP(o) exp(e2).

//value
value(res) ::= variable(v). 

//variable
variable(res) ::= DOLLAR ID(i).

Кто-нибудь знает, где находятся конфликты?

ОБНОВЛЕНИЕ

Если я удалю exp(res) ::= exp(e1) OP(o) exp(e2)., будет только два конфликта, но я неНе знаю, почему это вызывает конфликт ...

ОБНОВЛЕНИЕ2

Почему все в порядке здесь :

template ::= template_elements.
template ::= template template_elements.
template ::= .

1 Ответ

0 голосов
/ 03 марта 2011

Чтобы исправить вашу неопределенность опыта, установите приоритет и ассоциативность - см. Документацию в разделе Правила приоритета.

Лимон может обрабатывать левую рекурсию, но ваше правило template должно быть

template ::= template template_elements.
template ::= .

Поскольку template может быть пустым, вам не нужен template ::= template_elements кейс.

Какие ошибки вы получаете после внесения этих изменений?

...