私は haskell のスキルを少ししか持っていないので、parsec で予測解析 (LL*) を実装する方法について助けが必要です。
私は文脈自由文法を持っています:
<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 "("