私はParsecでパーサーを書いています。E -> E + E のような左再帰生成は LL パーサーでは簡単に記述できないため、Parsec はbuildExpressionParser
、中置演算子、後置演算子、および前置演算子をサポートする を提供します。しかし、添え字演算子はどうでしょうか?
E -> E [E] はどのように実装されますか? 2 番目の式を使用せずに閉じ括弧を使用できれば、 の Infix テーブル エントリでそれをエミュレートできますbuildExpressionParser
。考え?
編集:私の文法で最もうまくいく可能性が高い左再帰除去のアルゴリズムがあることを知っています。簡単なもの、またはよく抽象化されたもの ( などbuildExpressionParser
) を探しています。それ以外の場合は、Happy を使用します。