Сочетание лексера и парсера в комбинаторе парсера
я используюuu-parsinglib
, но я думаю, что следующий вопрос является универсальным синтаксического анализатора.
Давайте рассмотрим следующий пример:
У меня есть лексер с комбинаторомpLex
, который производит список токенов (типаMyToken
). Теперь я хочу написать парсер, который будет потреблять токены и создаватьAST
.
Как лучше всего соединить лексер и парсер? Прямо сейчас у меня естьlex
функция:
lex s = parse ( (,) <lex s = parse ( (,) <$> pLex <*> pEnd) (createStr (LineColPos 0 0 0) s)
gt; pLex <*> pEnd) (createStr (LineColPos 0 0 0) s)
Должен ли я создать функциюparse p = ...
? Если да, как я могу построить его, чтобы отслеживать столбцы и строки от лексера? Или я должен создатьparserCombinator
, который бы использовалpLex
комбинатор как-то?