Я пытаюсь создать простой лексер/парсер с Alex/Happy в Haskell, и я хотел бы, чтобы содержал некоторую информацию о локализации из текстового файла в мой окончательный АСТ.Как сохранить несколько семантических значений во время разбора с помощью Happy/Haskell
мне удалось построить лексер с помощью Алексы, что построить список лексем с локализацией:
data Token = Token AlexPosn Foo Bar
lexer :: String -> [Token]
в моем Счастливом файле, при объявлении маркеров части%, я могу заявить, что является смысловой частью маркер с $$ символ
%token FOO { Token _ $$ _ }
и в правиле синтаксического анализа, то $ я буду ссылаться на этот $$.
foo_list: FOO { [$1] }
| foo_list FOO { $2 : $1 }
Есть ли способ, чтобы обратиться к той части AlexPosn и к Foo части FOO маркера? Прямо сейчас я знаю только, как относятся только к одному из них. Я могу найти информацию о способе «добавить несколько $$» и обратиться к ним позже.
Есть ли способ сделать это?
В.
На самом деле, это не представляется возможным даже в C flex/bison, поэтому его не должно быть возможно непосредственно в haskell или caml. Однако я мог бы использовать кортеж данные Token = Token (AlexPosn, Foo, Bar)) вместо нескольких аргументов. Я оставляю вопрос открытым на несколько дней, но я думаю, что я скоро закрою его. . – Vinz