Когда вы пишете описание Happy, вам нужно определить все возможные типы токенов, которые могут появиться. Но вы можете сопоставить только с символическими типов, а не отдельные лексемы значения ...Happy: Это не ключевое слово
Это своего рода проблематично. Рассмотрим, например, ключевое слово data
. Согласно отчету Haskell, этот токен является «зарезервированным». Поэтому мой токенизатор распознает его и отмечает его как таковой. Однако рассмотрите ключевое слово as
. Теперь выясняется, что это не a reservedid; это обычный вариант. Это только одно в одном контексте. Вы можете полностью объявить нормальную переменную с именем as
, и все в порядке.
Итак, вот вопрос: Как разобрать as
?
Первоначально я действительно не думал об этом. Я просто определил новый тип токена, который представляет любой токен varid, у которого текст as
.
... а затем я провел около 2 часов, пытаясь выработать почему ад моя грамматика на самом деле не работает. Да, получается, что, поскольку этот тип токена перекрывается с существующим типом токена, порядок объявления является значительным. (!!!) Буквально, изменение порядка заявлений делало грамматику синтаксически безупречной.
Но теперь я волнуюсь. Я боюсь, что as
никогда не будет сопоставляться как varid и будет соответствовать только самому себе. Таким образом, все правила грамматики, которые говорят varid, отклонят токен as
—, что совершенно неправильно!
Что такое правильно Способ исправить это?