我只有几个技能与haskell和我需要帮助如何实现预测分析(LL*)与parsec。
我有上下文无关文法:
<a> ::= identifier | identifier '(' <args> ')'基于http://research.microsoft.com/en-us/um/people/daan/download/parsec/parsec.pdf (章节预测解析器),我写了这段代码:
term = do{ x <- m_identifier
; try( char '(' )
; b <- argsparser
; char ')'
; return (FncCall x b)
}
<|> do { x <- m_identifier
; return (VarId x)
}我期望这段代码尝试匹配'(‘,如果不匹配,解析器将继续并仅匹配标识符。此代码仅适用于匹配标识符'(‘args ')’。
如果只在标识符"a“上调用它,它会抛出:
parse error at (line 1, column 2):
unexpected end of input
expecting letter or digit or "("发布于 2012-03-08 18:02:40
所有可选的部分都应该在try下,我认为:
term = try( do{ x <- m_identifier
; char '('
; b <- argsparser
; char ')'
; return (FncCall x b)
} )
<|> do { x <- m_identifier
; return (VarId x)
}https://stackoverflow.com/questions/9615493
复制相似问题