我正在使用
让我们考虑以下示例:
我有一个带有组合器
连接词法分析器和解析器的最佳方法是什么?现在我有一个
我应该创建一个名为
uu-parsinglib
,但我认为以下问题是通用的解析器组合问题。让我们考虑以下示例:
我有一个带有组合器
pLex
的词法分析器,它生成MyToken
类型的令牌列表。现在我想编写一个解析器,它将消耗这些令牌并构建一个AST
。连接词法分析器和解析器的最佳方法是什么?现在我有一个
lex
函数:lex s = parse ( (,) <$> pLex <*> pEnd) (createStr (LineColPos 0 0 0) s)
我应该创建一个名为
parse p = ...
的函数吗?如果是,我如何构建它以跟踪来自词法分析器的列和行?或者我应该创建一个parserCombinator
,它将以某种方式使用pLex
组合子?
“test:$name”
)。因此,我通常编写一些“end”组合器,它们会返回令牌列表,然后我将它们加在一起。这是一个不好的方法吗? - Wojciech DanilotokenizeSegment :: P String [MyToken]
和parseSegment :: P [MyToken] SegmentAST
,那么可以执行类似于parse parseSegment <$> tokenizeSegment :: P String (Either ParseError SegmentAST)
的操作。你还可以通过解构Either
并将ParseError
传递给主解析器来处理该错误。 - J. AbrahamsontokenizeSegment
的结果。例如,结果可能是[Newline, Indentation 2]
(Indentation表示缩进级别),除非您知道下一个段落,否则无法将其转换为任何AST结构? - Wojciech Danilo