Я пишу метод рекурсивного спуска для булевых выражений, например:Синтаксические + и * в логических выражениях с помощью рекурсивного спуска
(1 * 0)
(0 + ~1)
(0 * (1 + c)
Где-«True», 0 «False», + есть " или ', * is' и ', ~ is' not 'и' c '- это просто имя переменной (это может быть любая отдельная буквенная буква). Я планирую использовать скобки, а не выполнять какой-то порядок операций.
Мой текущий синтаксический анализатор может распознать следующую форму выражения
Expression ::= 1
| 0
| Character
| ~ Expression
Но я не уверен в том, как я бы реализовать + и * на вершине этого. Я совершенно уверен, от того, что я прочитал очевидное выполнение
Expression ::= 1
| 0
| Character
| (Expression + Expression)
| (Expression * Expression)
вызывают бы бесконечный цикл, как это "лево-рекурсивным. Я не уверен, как изменить это, чтобы удалить такую бесконечную рекурсию.
См. Мой ответ SO о том, как написать рекурсивный парсер спуска: http://stackoverflow.com/questions/2245962/is-there-an-alternative-for-flex-bison-that-is-usable-on- 8-разрядный встраиваемый-системы/2336769 # 2336769 –