Что означают эти три нетерминальных символа (expr, term и factor) в этом BNF целочисленных арифметических выражений? - PullRequest
0 голосов
/ 04 мая 2018

Вот набор стандартных BNF для целочисленных арифметических выражений, и я хочу знать, как происходит этот BNF? И почему нам нужно определить следующие три вида нетерминальных символов («expr», «термин» и «фактор»)?

expr -> term [ ('+' | '-') term ]*
term -> factor [ ('*' | '/') factor ]*
factor -> '(' expr ')' | identifier | number

1 Ответ

0 голосов
/ 04 мая 2018

Технически, имена нетерминалов ничего не значат, по крайней мере, для алгоритма синтаксического анализа. Как и имя переменной в программе, их единственная цель - дать читателю подсказку.

В этом случае имена в основном просто условные обозначения, основанные на математической терминологии. Например, если мы напишем 3 * 7, то мы бы сказали, что 3 и 7 являются факторами результата (21). На самом деле не существует общего слова для 3 + 7, и называть их "термины", вероятно, проще, чем "слагаемые".

Причина, по которой мы их разделили, заключается в том, что мы хотим описать общее использование, в котором a + b * c означает «сумму a и b * c». Другими словами, аргумент оператора «плюс» или «минус» может быть продуктом, но аргумент оператора «раз» или «делить» не может быть суммой, если он не заключен в скобки. (Как показывает грамматика, любое выражение, заключенное в скобки, является «фактором».)

...