312*_*k1t 3 haskell parsec ll-grammar
我只有一些与haskell的技能,我需要帮助如何使用parsec实现预测解析(LL*).
我有无上下文语法:
<a> ::= identifier | identifier '(' <args> ')'
Run Code Online (Sandbox Code Playgroud)
基于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)
}
Run Code Online (Sandbox Code Playgroud)
我希望此代码尝试匹配'('并且如果不是解析器将继续并且仅匹配标识符.此代码仅用于匹配标识符'('args')'.
只在标识符"a"上调用它会抛出:
parse error at (line 1, column 2):
unexpected end of input
expecting letter or digit or "("
Run Code Online (Sandbox Code Playgroud)
所有替代部分应该在尝试,我认为:
term = try( do{ x <- m_identifier
; char '('
; b <- argsparser
; char ')'
; return (FncCall x b)
} )
<|> do { x <- m_identifier
; return (VarId x)
}
Run Code Online (Sandbox Code Playgroud)