1

私の質問に対する回答がまったく得られなかったので、MKS Yacc に代わる、選択設定の構文または非常に類似したものをサポートするものはありますか? 、より基本的な質問をします。

  • MKS Yacc が提供する「選択設定」を使用した人はいますか?

持っている場合、何に使用しましたか。また、ルールの最後の位置以外で使用する意味はありますか?

次のような規則を表す文法に注意する必要があります。

    TOKEN1 LPAREN non_terminal1 [^EQUAL] TOKEN2 non_terminal2 RPAREN

私が何かを誤解していない限り、埋め込まれた選択設定は、このコンテキストでは何の価値もありません。

バックグラウンド

MKS Yacc は、彼らの Web サイトで「選択設定構文」と呼ばれる表記法をサポートしています。図示されていませんが、トークンまたはキャレット付きの角括弧内のトークンのリスト (オプションの場合があります) で構成され、特定のトークンがこの構造に従ってはならないことを示しますが、そのトークンは一部としてカウントされません。このルールの:

non_terminal1:  TOKEN1 non_terminal2 TOKEN2 [^TOKEN3]

したがって、このルールは、次のトークンが a でない限り、 a の後に aTOKEN1が続き、non_terminal2aTOKEN2がa であることを示しています。non_terminal1ただし、次のトークンが a のTOKEN3場合は、他のルールが適用されます。

(角かっこで囲まれた項目が非終端記号になるかどうかはわかりません。表記法を使用して見たコードは、常にトークンまたはスペースで区切られたトークンをいくつか使用し、非終端記号を使用することはありません。私もそうではありませんキャレットが必要かどうかを明確にしてください。繰り返しますが、私が見たすべての例でキャレットが使用されています。)

4

1 に答える 1

1

ジョナサン。午前1時30分に私はこれを自分でやろうとする準備はできていませんが、それらのルールが何をするにしても、通常のBNFのようなもので書くことができるルールの省略形にすぎません。これを見ると、「選択設定」が行っていることは、1つの文法規則で複数のプロダクションになるものを表現できるようになっているように見えます。

私は少し掘り下げてこれを見つけまし。これは私の仮定を裏付けています。選択設定では、先読みを明示的に挿入できるため、他の方法では矛盾するルールを明確にすることができます。

私が提案したいのは、これらのルールの1つがyaccまたはストレートBNFに書き直された場合にどのようになるかを考えることです。私はそれが次のようなものになると思います

TOKEN1 LPAREN non_terminal1 MULT TOKEN2 non_terminal2 RPAREN
TOKEN1 LPAREN non_terminal1 DIVIDE TOKEN2 non_terminal2 RPAREN
TOKEN1 LPAREN non_terminal1 ADD TOKEN2 non_terminal2 RPAREN
TOKEN1 LPAREN non_terminal1 SUBTRACT TOKEN2 non_terminal2 RPAREN
TOKEN1 LPAREN non_terminal1 EXP TOKEN2 non_terminal2 RPAREN
TOKEN1 LPAREN non_terminal1 MOD TOKEN2 non_terminal2 RPAREN
...

そのため、全体的な効果は、等しい以外[^のすべての演算子に対して1つのルールを取ることです。この表記は、セットの補集合のようなものについて、さまざまなベル研究所の言語で一般的です。

于 2009-01-26T08:50:05.620 に答える