Flex и Bison Parser, один и тот же персонаж для двух жетонов - PullRequest
0 голосов
/ 24 февраля 2019

Я делаю небольшой парсер с Bison и Flex для обучения.

У меня проблема, я хочу иметь возможность иметь двоичный оператор ИЛИ как

exp || exp

где символ '|'два раза означает операцию ИЛИ двух выражений, одного слева и одного справа.

Но я также хочу иметь возможность определить абсолютное значение как

| exp |

где символ '|'используется как скобки для обозначения абсолютного значения выражения внутри.

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

||exp| + exp|

который я хочу проанализировать как

(| (|exp|) + (exp) |)

, означающее абсолютное значение абсолютного значения выражения, добавленного с другим выражением.

Здесь мой анализаторзатем читает первые два символа канала как OR, а затем обнаруживает ошибку с остальными, что имеет смысл, но это не то, что я хочу.

Я попытался дать другой приоритет правилам в моем файле зубров, и попыталсязаставляя flex не распознавать двойную трубу, а распознавать только одну трубу за раз, но я не настолько сведущ в том, чтобы быть на 100% уверенным в том, что я делаю.

Единственное решение, которое ямы обнаружили, что заставляет пробелы с обеих сторон оператора ИЛИ, что работает, но не очень красиво.Я также мог бы просто использовать другого персонажа для одной из операций, но я хочу быть немного упрямым хотя бы немного, и я подумал, что есть чему поучиться здесь.

спасибо за чтение моей проблемы, я надеюсь, у кого-то есть идеядля решения

ура

...