В настоящее время я пишу парсер для компилятора игрушечного языка, используя Happy & Alex. Поскольку требуется некоторая форма дополнительного макета, я должен изменить состояние Алекса перед сопоставлением с нетерминалом block
. К сожалению, кажется, что упреждающий токен, требуемый Хэппи, считывается до того, как у меня появляется возможность изменить состояние Алекса.
Вот небольшой фрагмент, демонстрирующий проблему:
funcDef : header localDefs block
^ I have to change alex's state
before the underlying lexer
starts reading the block tokens.
Есть ли общий подход к этой проблеме?
localDefs
не является самозавершающимся, поэтому должна быть какая-то лексическая функция, которую вы можете использовать, чтобы узнать, где начинается блок. Не могли бы вы немного пояснить? - person rici   schedule 25.03.2017