0

C# で出力したいので、GOLD パーサー ビルダーを使用してスクリプト言語の文法を作成しようとしています。ただし、パーサーは明らかに端末が一意であることを望んでいます。しかし、端末の意味は状況依存である可能性があります?! 記号「-」を考えてみましょう。-xとの両方x-yが有効であり、次のように文法を書くことができます。

! -------------------------------------------------
! Terminals
! -------------------------------------------------
Opers = [+-*/]

! -------------------------------------------------
! Rules
! -------------------------------------------------

<Expression> ::= <Expression> <Operator> <Expression>
               | '-' <Expression>
               | <Value>
<Operator>   ::= Opers

ただし、シンボル '-' は 2 回定義されています。1 回目は の 2 番目の生成規則で暗黙的に (!) 定義されたシンボルによって、<Expression>もう 1 回はターミナル (Opers によって定義されます) として定義されています。

さらに、文字列には - 記号も含めることができ、'-' !? の 3 番目の定義が追加されます。これをどのように回避しますか?これに関する情報は、GOLD のドキュメントや Web のどこにもありません。私が知らないパーサービルダーを扱ういくつかの主要な方法があると思います。

これがテーブルベースのパーサーで解決できない問題である場合、C# 出力が必要なため、どのような代替手段がありますか?

4

1 に答える 1