Много экземпляров терминального символа в грамматике БНФ - PullRequest
1 голос
/ 08 октября 2019

с учетом грамматики, подобной

<term>::= x[i]+exp(x[i]) | x[i]
<i>::= 1|2|3

Существует ли способ заставить использовать одно и то же «i» в одном решении нетерминального символа? Итак, я хочу избежать таких решений, как x [1] + exp (2) или x [3] + exp (1). Существует ли способ избежать использования одного и того же «i» в одном решении нетерминального символа? Я хочу избежать таких решений, как x [1] + exp (1)

1 Ответ

2 голосов
/ 08 октября 2019

Нет, это невозможно с контекстно-свободной грамматикой.

По сути, это означает, что "контекстно-свободный" означает. Каждый нетерминал в производстве может быть расширен независимо от контекста, в котором он появляется.

Конечно, если i действительно имеет только три возможных значения, вы можете перечислить конечное число легальных произведенийВ соответствии с любым определением «правовой», которое вы считаете удобным. Но это становится очень запутанным, когда количество возможностей увеличивается.

Наиболее удобным решением, как правило, является принятие базового синтаксиса и проверка на соответствие (или различие) в связанном семантическом правиле. Это также учитывает лучшие сообщения об ошибках.

...