"if-then-else"文を解析するためにProlog DCGを使用できますか?もしそうなら、私は特定の "if" then "else"文字列と一致しなければならないとすれば、どのようにそのような文を解析しますか?これが不可能な場合は、私の選択肢は何ですか?Prolog:if-then-else文の解析にDCGパーサを使用する方法
0
A
答えて
0
DCGは完全に適しています。しかし、素朴なPrologであるなら、パワーを活用し、実用的なものを実装するために何らかの選択をしなければなりません。 たとえば、可能であれば、DCGをテキストソースに直接適用し、事前のトークナイザは必要ありません。これが適切な場合は、実際のタスクに依存します。それはここで大丈夫だとしましょう。それは、
:- [library(http/dcg_basics)].
conditional(if_then_else(Cond, Then, Else)) -->
blanks, "if",
blanks, bool_expression(Cond),
blanks, "then",
blanks, statement(Then),
blanks, "else",
blanks, statement(Else).
は非常に簡単ではありません。そして、私たちのDCGは、利用可能なヘルパライブラリを使用して、SWI-Prologで実装されるだろうか?
このother answerは、優先順位を考慮して式を解析(および評価)する方法を示しています。ブール演算子で簡単に拡張することができます。ただ優先順位を付けてください。声明は、黙示的に割り当てを許可し、条件付きで再発する。
あなたは同じ性質を持ついくつかの他の生産に「横並び」を表示された場合は、おそらく「空試合の生産 は、いくつかの非効率性を導入する可能性であること、空白 // 0の使用に注意を払う必要があります。
bool_expression // 1、文// 1が定義されている場合は、パーサが呼び出すことができます。
...,
phrase(conditional(C), " if 1 < 2 then a = 1 else a = 0 "),
...
とCは...
関連する問題
- 1. 解析XML使っSTAXパーサのJava
- 2. スキームでDCGを解析する(プロローグなし)?
- 3. 文字列を解析する方法
- 4. pyasn1で使用するASN1文法からオブジェクトクラスを解析する方法は?
- 5. node.jsを使用して文字列を配列に解析する方法は?
- 6. APIを使用せずにJSON文字列を解析する方法は?
- 7. ビル予測パーサと解析テーブル
- 8. SWI-Prologの解析でDCG述語が機能しない
- 9. libxml解析を使用してxmlデータを解析する方法
- 10. luceneを解析する方法spanNotとspanNearを使用する文字列クエリ
- 11. POIを使用してExcelファイルのUTF-8文字を解析する方法
- 12. MS SQL構文のみを使用してHL7デリミタを解析する方法
- 13. SAXのアプローチを使用してJavaでXML文書を解析する方法
- 14. eclipseでリンク文法パーサのJavaバインディングを使用する
- 15. ParseKit文法を使用してタイムスタンプを解析する
- 16. 構文解析中に定義された型名を解析する方法
- 17. linqをオブジェクトに使用してxmlを解析する方法
- 18. Prologでリストを使用するDCG
- 19. ストリーミングAPIを使用してJSONの解析とJSONパーサ - 混合モード
- 20. プロローグの構文解析木を論理文に戻す方法
- 21. RegExと '\'文字を使用してJSONを正しく解析する方法
- 22. jqueryを使用してjson文字列を解析する方法
- 23. MVCでModelを使用してRazor文字列を解析する方法
- 24. クラス名でXML文書を解析する方法Javaを使用して
- 25. PHPを使用してJSON文字列を解析する方法
- 26. JSON.parse()を使用してJSON文字列を解析する方法
- 27. angular2のナビゲーションを使用してデータを解析する方法
- 28. FileHelpersの使用。このCSVタイプを解析する方法
- 29. 改造を使用するJSONArrayを解析するオブジェクトを解析しないで構文解析する方法は?
- 30. IBM bluemixオブジェクトストアを構文解析サーバーfileadapterで使用する方法
感謝を構文木が含まれています!私は間違いなくこれを試してみましょう! – user1059303