問題タブ [compiler-theory]
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.
context-free-grammar - CFG から IL への変換
任意の IL から CFG を構築し、その CFG を IL に変換したいと考えています。もちろん、CFG 内の頂点の順序は、元の IL 命令の順序と同じではありません。
これは問題ありませんが、いくつかのものが過度に複雑になります。想像:
これは次のようなフロー グラフになります: (ジャンプ B) -> (ジャンプ C) -> (リターン) これはもちろん単純化された例ですが、CFG から変換するときの問題を示しています。
学界でこのトピックに関する情報はありますか? グラフをボトムアップでトラバースするのは非常にエレガントだと思いましたが、より複雑なケースではうまくいきません。
解決策は、トップダウンで歩いて CF マージを検索することかもしれませんが、その場合、ループを正しく処理できません。したがって、これを正しく行う唯一の方法は、可能性のある CF マージが発生した場合にそれを検索することのようです。そうでない場合は、ループが必要です。つまり、ループが優先され、その後に続くパスが評価されます。これは解決可能な問題のように思えますが、非常にコストがかかるため、問題に対するより洗練された解決策が存在する可能性があります。また、「break」ステートメントについて考えると、ループによって CF マージが発生する可能性もあります。
compiler-construction - LLVMを作成した理由は何ですか?
LLVMと通常のコンパイラの違いは何ですか?
それはより動的であり、したがって通常は非常に動的な言語(つまりJavascript)を静的バイナリコードにコンパイルするために使用できますか?作成の背後にある原則は何ですか?
コンパイラ用のDragonBookは知っていますが、LLVM用にそのようなものはありますか?
編集:私はこの興味深いプロジェクトを見つけました。
project-management - コンパイラ プロジェクトの管理方法
私は CS の学生で、今年はコンパイラ プロジェクトがあります。
3 人のパートナーとプロジェクトを管理する方法を知りたいです。
コンパイラには多くのレベルとプロセスがあることを知っており、これらの機能を利用してプロジェクトを管理したいと考えています。
開始するために提供できるヒント/ポインター/リソースに感謝します。
compiler-theory - 考えられるすべての「状況固有」の実行時エラーを予測するコンパイラを持つことは可能でしょうか?
「状況固有」とは、現在のデータベース設定、一部のOSのバージョンなど、アクセスできるデータを使用することを意味します.
コンパイラがアプリで現在使用しているデータベースをチェックし、「データベース内の現在のデータは、あなたが書いたばかりのステートメントをトリガーすることはありません」または「ご存知のように、これが null 値になると、本当に困惑することになります'... しばらく時間がかかる可能性があります。あらゆる可能性」。
これは実現可能/価値があると思いますか? これはどこかに存在しますか?
あらゆる可能性を見つけ出して、自動的に例外処理などを考え出す量子コンパイラがあれば素晴らしいでしょう。
language-agnostic - コンパイラを作成するためにプログラミング言語に必要な言語機能は何ですか?
プログラミング言語はいくつかの段階を経るようです。まず、誰かが新しい言語、Foo 言語を思いつきます。コンパイラ/インタプリタは別の言語で書かれており、通常は C またはその他の低レベル言語です。ある時点で、FooL は成熟して成長し、最終的に誰かがどこかで、FooL 自体に FooL 用のコンパイラーおよび/またはインタープリターを作成します。
私の質問は次のとおりです。誰かがその言語自体を実装できるような、言語機能の最小サブセットは何ですか?
optimization - 先読み言語と複数ファイル用のコンパイラを作成しますか?
私の言語では、定義がメソッドの下に表示されるときに、メソッドでクラス変数を使用できます。また、自分のメソッドなどの下のメソッドを呼び出すこともできます。「ヘッダー」はありません。この C# の例を見てみましょう。
それをどのようにコンパイルすればよいですか?私が考えていたのは:
- pass1: すべてを AST に変換します
- pass2: すべてのクラスを調べて、define classes/variable/etc のリストを作成します。
- pass3: コードを調べて、未定義の変数、間違った使用などのエラーがあるかどうかを確認し、出力を作成します
しかし、これが機能するように思えます.pass3を実行する前に、すべてのファイルに対してpass 1と2を実行する必要があります. また、構文エラーが見つかるまで、やるべきことがたくさんあるように感じます (ブレースを閉じるのを忘れたり、16 進値の代わりに 0xLETTERS を書き込んだりするなど、解析時に実行できる明らかなエラーを除きます)。私の腸は、他の方法があると言っています。
注: bison/flex を使用してコンパイラを生成しています。
computer-science - 有限状態オートマトンによるパックマン表現
FSA グラフで表現したい pac-mac に似たゲームを考えてみましょう。迷路 (テーブル) があり、ランダムな位置にベリーがあります。目標は、迷路内のすべてのベリーを食べることです。コントロールのために考慮しなければならないコマンドは、
GOAHEAD、LEFT、RIGHT、CHECKBERRY (パックマンの FRONT にベリーがあるかどうかをチェックする)、EAT、OFF-MAZE です。
最大 10 ステージが必要です...そして、連続して複数のギャップを設けることはできないことに注意してください。ありがとうございました
編集: 代替テキスト http://img338.imageshack.us/img338/2479/graphp.jpg
わかりました。グラフを作成しましたが、ギャップを越える方法が見つかりません。例: あるベリーの列の後の迷路で突然前にギャップがあり、次のベリーはそのギャップのすぐ下にあります. したがって、左または右に曲がっても、checkberryコマンドがTRUE値を返さないため、グラフがどのように見えるかわかりません。では、パックマンが食事をせずにギャップスクエアに移動する方法が必要ですが、前のものに移動するか、他の人に移動するかをどのように決定しますか?
java - 構文解析問題
学校では、言語を設計してから実装するように割り当てられました (私はそれを実装するのがとても楽しいです =))。先生は yacc/lex を使うように言いましたが、私は Java + regex API を使うことにしました。私が設計した言語は次のようになります。
ご覧のとおり、かなり基本的な言語です =)。
抽象クラスを作成してからなどのSentence
サブクラスを作成し、文の集まりだけのクラスを作成するなど、非常に OOP の方法で実装できると思いました。次に、すべての s で抽象メソッドを呼び出すため、言語に準拠するための最初のアプローチは 2 つのフェーズのみで構成されていました。VariableAssignment
IfSentence
Program
eval
Sentence
- 検索行の構文を特定する
- 各行に対応するクラスを作成する
もちろん、フェーズ Ii で何か問題が発生した場合、エラーが発生する可能性があります。
私の質問は、私はそれを間違っていますか?理論が言うように、すべての段階 (字句、構文、意味) を検討する必要がありますか? 単純な 2 フェーズ コンパイラを続行する必要がありますか?
parsing - LALR(2)ぶら下がっている
LALR(2)は、ぶら下がっているelseケースを自然に処理できますか(LALR(1)のように、特別なルールはありません)?
ありがとう