問題タブ [dangling-else]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
antlr - ANTLR のツリー表現への If ステートメント
正しく解析する次の if ステートメントがあります。
ここで、これを AST に解析したいと思います。これが私がやった方法です:
組み立て説明書がうまくいかないようだったので、!
とを追加しました。^
->
私の結果は、3 つの子を持つ AST です。1 は条件、2 と 3 はステートメント ブロックです。else の部分はオプションです。else がない場合、ノード 3 はありません。
問題は、ステートメント ブロックが常に空であることです。それを修正する方法は?
compiler-construction - 他のぶら下がりのためのLL(1)文法
コンパイラの構築において、主なあいまいさの問題の1つは、他の問題がぶら下がっていることです。Aho、Lam、Sethi、およびUllmanによるCompilers:Principles、Techniques、and Toolsの本で述べられているように、他のぶら下がりの文法はLL(1)パーサーでは使用できません。
LL(1)として扱えないというのは本当ですか?
parsing - LL1 とぶら下がっている他のための明確な文法
Flex for Scanner と PGen という特別なツールを使用して文法を定義する簡単なコンパイラを作成しようとしています。
今、私は他にぶら下がっているための明確な文法を解決しようとしています. 私はこれを検索しました。
これは、else 問題がぶら下がっている文法です。
これは、この問題を解決する文法です ( Berkeley のスライドを使用):
しかし、この文法はまだ LL1 ではなく、あいまいです。
このあいまいさを解消してLL1にしようとしたところ、再びダングリングelseの問題に直面しました。
ネストされたifの明確なLL1文法を見つけるのを手伝ってくれる人はいますか?
この文法は LL1 にならないというStack Overflow の Q&A を読みました。しかし、このあいまいさをどのように解決できるかわかりません。
parsing - Coco/Rで他にぶら下がっている問題を解決するには?
Coco/R で dangling-else の問題があります。Coco/R のユーザー マニュアルを理解しようとしてGoogle に問い合わせましたが、自分で問題を解決できません。
問題を次の Coco/R 文法に簡略化しました ( に保存されていますnew4.atg
)。
でコンパイラをビルドしたい場合、次のcoco.bat
答えが得られます。
Googleでの最良の結果では、ステートメントを宣言できることを読みましたIF(isXXXFollowYYY())
が、それが最善の解決策であるかどうか、方法はわかりません。(私の例では: Expr = Test | If(isTestFollowID)Id Test
. しかし、どこでisTestFollowID
宣言されていますか?)
起動時に警告を表示したくありませんcoco.bat
。
ambiguous - LL(1) 文法の Else のぶら下がりによるあいまいさの除去
コンパイラ設計のダングリングelse問題の場合、あいまいさを取り除く前にそれを因数分解したままにする理由はありますか?
CFG を LL(1) 文法に変換しているので、私の教授は、最初に再帰を除去し、次に左因子を除去し、文法からあいまいさを除去するように求めています。しかし、私が読んだことによると、あいまいさは通常最初に排除されます。左因数分解後にあいまいさを取り除く方法がわかりません。
これは、因数分解を残した後の結果です。
しかし、私が理解しているように、あいまいさを取り除くには文法を書き直す必要があるため、文法は常にこのようになりますよね?
または、それを行う別の方法はありますか?私が見る限り、これはぶら下がっている他からあいまいさを取り除く唯一の方法です。
c - cのdangling-else問題とは正確には何ですか?
コードはどのように機能しますか? どの if-else ステートメントが相互にリンクされていますか? では、なぜ出力が「$$$$$」のようになるのでしょうか。