Я работаю над принципами и практикой программирования Страуструпса с использованием c ++. Есть эта грамматика, которую он использует при построении калькулятора в первых нескольких главах книги. Одним из упражнений является добавление факториального оператора в калькулятор. Он дает подсказку
Начните с изменения грамматики, чтобы учесть оператор более высокого уровня
Что такое оператор более высокого уровня? (к сожалению, он не объяснил это до этой главы в книге, и я не знаю, было ли это объяснено в других главах)
Грамматика, которую он просит изменить, такова:
Expression:
Term
Expression "+" Term
Expression "-" Term
Term:
Primary
Term "*" Primary
Term "/" Primary
Term "%" Primary
Primary:
Number
"(" Expression ")"Number:
floating-point-literal
Я боролся с этим целый день, и я никуда не денусь. Будем рады некоторым объяснениям.
Оператор более высокого уровня — это оператор, который имеет больший приоритет, чем другие.
Это может быть добавлено к вашей грамматике так же, как умножение, деление и по модулю отличаются от сложения и сложения.
Другими словами, ваш синтаксический анализатор должен сначала попытаться разобрать факториальный синтаксис, затем умножение, затем сложение
Других решений пока нет …