括弧が不要な算術式の明確な文法を探しています。たとえば、括弧はid+(id*id)
では冗長ですが、(id+id)*id
では冗長ではありません。冗長括弧のない算術式の明確な文法
答えて
「括弧が不要な算術式」の意味によります。これは、冗長括弧で式を受け付けますが、また、任意にネストされた括弧を受け入れる:
expr ::= factor
expr ::= factor mul_div factor
mul_div ::= '*' | '/'
factor ::= term
factor ::= term add_sub term
add_sub ::= '+' | '-'
term ::= NUMBER
term ::= '(' expr ')'
私はその数が署名した番号を認識するために管理してと仮定していますので、何の単項プラスまたはマイナスがそこにはありません。必要であれば、それをどう扱うかを考え出すことができます。必要に応じて変数などを追加することもできます。
不要なかっこを含む式を拒否する文法を意味する場合は、文脈自由文法ではないものを検索していると思います。
これは簡単に実行できます。括弧が必要になる唯一の時間は、乗算式の1つとしての合計式、または分割式の1つの第2ピースとしての式です。いずれの場合でも、括弧内のマテリアルに少なくとも1つの裸の演算子(括弧で囲まれていない)を強制することによって、括弧が冗長でないことを保証することができます。
私はあなたが入試や宿題の質問に答えるのを助けているかもしれないと思いますが、私はそれほど好きではありませんが、これを不可能と呼んだり、不可能かもしれないと言っている人は間違っていて、 。
次のような式を解析したい:
expr ::= expr addsub term
expr ::= prodterm
expr ::= value
sum ::= expr addsub term
addsub ::= '+' | '-'
term ::= prodterm
term ::= unit
prodterm ::= term '*' unit
prodterm ::= term '/' produnit
unit ::= '(' sum ')'
unit ::= value
produnit ::= unit
produnit ::= '(' prodterm ')'
value ::= '0-9'*
唯一の価値は、それを囲む括弧を持つことはできません。単位は、乗算式の部分式です。 produnitsはあなたの部門表現にかっこの尾を許します。 (5)は(値)になります。これは不可能です。プロダユニットとユニットだけがカッコを持ち、カッコ内に算術演算子が必要です。 (値)は任意の式から派生することはできません。((何か))は不可能です。なぜなら、produnitとunitだけが括弧を派生しているからです。密接に見ると、produnitは、かっこが派生した場合や、単位として解析する場合や括弧のない場合には、*やa /が必要です。ユニットには、+または - が必要です。またはカッコはありません。
(5 + 6)は(5 + 6)がユニットとしてしか解析できないため、失敗する可能性がありますが、孤独なプロードユニットの周りにかっこを入れる方法はありません。孤独なプロダユニットの周りの括弧内のユニットまたはプロユニット。私はあなたのために自分の選択を打ち破ります:5 *(6 * 7)は解析しません - 単位時間という意味ですが、(6 * 7)は単位ではありません少なくとも1つの合計を持つ式のまわりの値またはかっこでなければなりません。少なくとも1つの合計が発生すると、かっこは自明ではありません。一方、5 /(6 * 7)は5/6 * 7と全く同じではありません。最初は5/6/7、2番目は5 * 7/6です。しかし、5 /(6)は5/6と同じです - 単一の値はカッコ内では出現できません。同様に、5 /(6/7)は5/6/7と同じではなく、5/7/6と同じで、2/5は6/7と同じであるためです。言い換えれば、中に裸の演算子がある場合、分母の周りのかっこは決して無関係ではありません。
(5 + 6)+7も不可能です。なぜなら、合計の左辺(および右辺)は、厳密な値、合計の周りの括弧なしの和、または製品の周りの括弧のない製品です。
あなたは、これらが保持されていることを納得させることができ、それが明確であることを自分で確認することができます。指数演算子を含むように拡張したり、より高い優先順位の演算子またはより低い優先順位演算子(例えば、==または<)に一般化することによって、それを拡張して保持することを自分自身に示すことができます。
こちらがお役に立てば幸いです。
- 1. PostgreSQLの、明確な、順括弧
- 2. SDN 4とCypher冗長括弧
- 3. VIMの中括弧 '/括弧' /大括弧 '/算術演算子の構文の強調表示の設定方法は?
- 4. 算術式の文法
- 5. スカラの中括弧は冗長でしょうか?
- 6. 符号なしの長い長い算術演算
- 7. arethmetic式の最初の冗長括弧のインデックスを決定する方法は?例えば
- 8. 与えられたあいまいな算術式文法を明白なものに変換するLL(1)
- 9. 角括弧を含む正確な式を一致させる
- 10. Javaバイナリ式ツリー - 式の括弧を確認する
- 11. 括弧内の改行が算術演算結果を変更するのはなぜですか?
- 12. TypeScriptの括弧書式
- 13. ジェネレータの式と角括弧
- 14. 括弧の外に出なければならないif文の条件式はどのくらいですか?条件式が長すぎた場合
- 15. ANTLR4:算術式の文法 - ゼロチェックによる除算、キーワードチェック
- 16. すべての演算子/括弧上の分割数式
- 17. MySQLユニオンがない括弧
- 18. C#警告の冗長な明示的なプロパティ名
- 19. 行方不明括弧エラー
- 20. 角括弧や演算子がない長い行をPythonで壊す方法はありますか?
- 21. が不要な余分な括弧に最適な方法/アルゴリズムは、私はこれを持っているBOOLや算術演算で
- 22. Arduinoの中括弧の文
- 23. OSX悪意のあるターミナルコマンド(など、コロン、括弧、中括弧、apersand、)
- 24. なぜ「予期しない」。括弧内のデフォルト値の演算子
- 25. 冗長なWHERE句?
- 26. Javaの冗長なクラスローディング
- 27. 冗長なステートメントの削除
- 28. AWSの冗長なリクエストログ
- 29. ES6括弧のない矢印機能
- 30. Rubyハッシュの括弧構文
[逆ポーランド語表記](http://en.wikipedia.org/wiki/Reverse_Polish_Notation) - 冗長括弧なし:-) –
私は、 CFG内の中置表記を伴う冗長括弧。 –
しかし、この質問は、ペン国家大学の候補者試験だけでなく、いくつかの本に現れます!だから、そこにいくつかの解決策があるはずです! – Moonwild