Можно ли рассматривать грамматику БНФ, которая не следует правилам ассоциативности операторов и приоритетов, как однозначную грамматику? - PullRequest
0 голосов
/ 12 октября 2019

Рассмотрим эту грамматику BNF:

<assign> = <id> = <expr>
<id> = A|B|C
<expr> = <id> + <expr>|<id> * <expr>|(<expr>)|<id>

Эта грамматика не является неоднозначной, поскольку для оператора можно нарисовать только одно дерево разбора. Однако это явно не соответствует правилам прецедентности операторов. Операторы *, +, () имеют одинаковый приоритет. Является ли эта грамматика однозначной или только не однозначной? Если это однозначно, значит, грамматика может быть однозначной без соблюдения правил ассоциативности операторов и приоритетов, это правда?

Ответы [ 2 ]

1 голос
/ 12 октября 2019

«Однозначный» и «не однозначный» означают одно и то же, то есть существует только одна возможная интерпретация. То, что это не та интерпретация, которую вы ожидаете, не имеет значения.

0 голосов
/ 13 октября 2019

Является ли эта грамматика однозначной?

Да.

Таким образом, грамматика может быть однозначной без соблюдения правил ассоциативности операторов и правил приоритета, это правда?

Да. Ассоциативность и приоритет операторов - это соглашения математики и языков программирования. Неоднозначность или ее отсутствие не имеют никакого отношения к тому, соответствует ли грамматика этим соглашениям.

...