Я делаю небольшой парсер с Bison и Flex для обучения.
У меня проблема, я хочу иметь возможность иметь двоичный оператор ИЛИ как
exp || exp
где символ '|'два раза означает операцию ИЛИ двух выражений, одного слева и одного справа.
Но я также хочу иметь возможность определить абсолютное значение как
| exp |
где символ '|'используется как скобки для обозначения абсолютного значения выражения внутри.
Теперь у меня возникают проблемы с синтаксическим анализатором, который не может правильно проанализировать строки, такие как
||exp| + exp|
который я хочу проанализировать как
(| (|exp|) + (exp) |)
, означающее абсолютное значение абсолютного значения выражения, добавленного с другим выражением.
Здесь мой анализаторзатем читает первые два символа канала как OR, а затем обнаруживает ошибку с остальными, что имеет смысл, но это не то, что я хочу.
Я попытался дать другой приоритет правилам в моем файле зубров, и попыталсязаставляя flex не распознавать двойную трубу, а распознавать только одну трубу за раз, но я не настолько сведущ в том, чтобы быть на 100% уверенным в том, что я делаю.
Единственное решение, которое ямы обнаружили, что заставляет пробелы с обеих сторон оператора ИЛИ, что работает, но не очень красиво.Я также мог бы просто использовать другого персонажа для одной из операций, но я хочу быть немного упрямым хотя бы немного, и я подумал, что есть чему поучиться здесь.
спасибо за чтение моей проблемы, я надеюсь, у кого-то есть идеядля решения
ура