2011-01-20 7 views
1

私は小さなコマンド言語を書いています。言語にはいくつかの簡単なコマンドがあり、複雑なコマンドを作ることができます。たとえば、コマンドfry an eggmake a sandwichmake coffeeがある場合、新しいコマンドを作成することができます。与えられたセットのパワーセットの生産ルールを書く方法

make a breakfast := fry an egg, make a sandwich, make coffee

はしかし、時には、私はmake a breakfastが設定されたコマンドの任意のサブセットすることが可能であるなど、朝食、時にはコーヒーやサンドイッチの両方のための唯一のコーヒーをしたい:{fry an egg, make a sandwich, make coffee}

このように私はのパワーセットを定義するルールが必要指定された一連の単純なコマンド。それは理にかなっていますか?それをしてもいいですか ?

+0

私にとっては意味があり、おそらくそれを行うことができます。しかし、あなたの既存の文法やサンプルコードの一部を見ていなくても、それを解析するのは難しいです。 – aschepler

+0

「ルール」とはどういう意味ですか?どのようなパーサを使用していますか?あなたの例には欠陥があります:私は2つの卵を揚げることができません。その制限はパーサーに焼き付ける必要がありますか?基本的に、私は途中で精通しているパーサーのパワーセットルールを書く方法を知らないし、なぜ私はしたいだろうか分からない。 –

答えて

1

(E)BNF文法表記を使用しているようです。あなたの質問は、文法規則でpowersetを取り込む方法に関するものです。 AFAIK(E)BNFは文脈自由文法を記述することしかできませんが、powersetは文脈依存のアルファベット{a}の言語{a^2^n}としてモデル化できます。つまり、(E)BNFを使用してパワーセットを記述することはできません。しかし、あなたができることは、特定のpowersetを列挙することです。例: S:=(a、{b、{c}} |(b、{c})| c |イプシロン); この言語は{a、b、c}アルファベットのパワーセットです。

+0

ありがとう、ガブリエル。文脈自由文法でパワーセットを記述できることが分かります。とにかくそれがどのようにモデル化できるかは興味深いです。 – Michael

関連する問題