問題タブ [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.
parsing - LL(0)パーサーのようなものはありますか?
LL(0)パーサーとLR(0)パーサーの違いを尋ねる質問をどこかで見ました。LL(0)パーサーのようなものはありますか?もしそうなら、トークンを見ずにどのように解析しますか?
c++ - 有効な LR(0) アイテムを表示
コンパイラ設計で SLR 解析で有効な LR(0) 項目を表示する C++ プログラムを作成する必要があります。これまで、文法をユーザーからの入力として受け取り、そのクロージャーを見つけることができました。しかし、SLR での goto 実装をさらに進めることができません。文法の有効な LR(0) 項目を表示する方法について、リンクまたはコードを教えてください。
-前もって感謝します
compiler-construction - 正しくないプログラムが正しい継続を持つことができるかどうかの決定
(次の質問は OCaml 言語に関するもので、OCaml の例がありますが、質問は非常に一般的なものであり、おそらく他のコンピューター言語の正解は私の問題も解決します。したがって、この質問を好きな言語で考えてみてください。)
OCamlで任意のプログラムを文字列として取り、そのプログラムが正しいか正しくないか、後者の場合は最後に適切な文字を連結することで正しいプログラムにできるかどうかを判断する関数を書きたい.
どこかにその言語のコンパイラがあり、それを適用して、「コンパイルする」または「コンパイルしない -- 行 X、文字 Y でエラーが発生しました」という応答を得ることができると想定しています (ほとんどの場合と同様)。とにかく言語)。要約すると、プログラムを受け取って返す関数が必要です。
- 正しい-- 文字列に正しいプログラムが含まれている場合。
- Erroneous -- 文字列に誤ったプログラムが含まれている場合、どのように文字を連結しても正しいプログラムにはなりません。
- Incomplete -- 文字列にエラーではない不正なプログラムが含まれている場合。
たとえば、OCaml プログラムは使用時に定義されていないlet x = f
ため、正しくありません。f
f の後に書くものは常に、以前に定義されていない識別子になるため、それを続けることはできません。プログラムlet x =
も正しくありません。しかし、拡張するとlet x = 5
、完全に有効なプログラムになります。したがって、私の関数は最初のケースでは Erroneous を返し、2 番目のケースでは Incomplete を返す必要があります。
私たちがプログラムを持っていると、物事はトリッキーになるかもしれません
私の関数は、プログラムを続行するとns
プログラムが正しくなることを確認する必要があるためです。
私の質問は: そのような関数/アルゴリズムを書くことは可能だと思いますか? もしそうなら、一般的な考えは何ですか?そうでない場合は、そうではないことを私に納得させてください。
(たとえば、不完全であることを暗示するものなど、洞察や部分的な回答に満足しています。たとえば、言語コンパイラが 3 行目にエラーがあり、プログラムに 100 行ある場合、続行は不可能であると私は信じています。プログラムの。)
garbage-collection - このGCシステムが悪いのはなぜですか?
大きなキズが見えないGCを考えたのですが、なぜこれ以上普及していないのか、なぜその使用を聞いたことがないのか疑問に思います。
システムは次のとおりです。
- すべてのオブジェクトには、4バイトのunsignedintカウンターが接続されています。(2バイトかもしれませんが、わかりません。
- オブジェクトが作成されるときはいつでも、そのカウンターは1から始まります。
- オブジェクトがパラメーターとして関数に送信されると、そのカウンターがインクリメントされます。
- オブジェクトが関数内で使用されなくなった時点(スコープの最後である可能性があります)に達すると、そのカウンターはデクリメントされます。
- オブジェクトのカウンターがゼロに達すると、コード内のどの位置でも参照されないため、オブジェクトは削除されます。
カウンターが故障するフリンジケースはありますか?短所と長所は何ですか?
よろしくお願いします。
compiler-theory - コンパイラはどのように構文ツリーを構築しますか?
コンパイラはどの時点で構文ツリーを構築しますか? 実行可能ファイルのビルド中に、ツリーをどのように形成し、ツリーを変換しますか?
c++ - C++可変メモリ割り当て
これらは主にコンパイラの設計に関する質問です。コンパイラがこれをコンパイルするとき、例えば:
int * pData = new int[256];
メモリはオンザフライでどのように割り当てられますか?コンパイラは、メモリを割り当てるOSルーチンを呼び出しますか、それともメモリを割り当てる関数をコンパイルしますか?
また、あなたがこのようなものを書くとき:
実行時にメモリが割り当てられないため、プログラムのデータセグメントでデータがある程度のスペースを占めると想定しています。コンパイラは実行時にブランチが実行されるかどうかを実際に判断できないため、int y;
実行されるかどうかに関係なく、変数用にメモリが予約されていますかint y;
?そして、それが関係なく予約されている場合、実行される場合とされない場合があるブロック内の変数をmem allocする方が、メモリ効率が高くなりませんか?
ooありがとう
computer-science - プログラムの制御フローグラフ
私は現在コンパイラクラスを受講しており、最適化を実装するためにCFGを構築する必要があります。私が理解できないことの1つは、プログラムにCFGがいくつあるかということです。私が今まで見たすべての例は、単純なコードセグメントのCGFのようです。したがって、3つの機能を持つプログラムがある場合。機能ごとに個別のCFGがありますか、それともプログラム全体に1つの大きなCFGがありますか?
garbage-collection - オブジェクト指向言語のヒープ オブジェクト表現
修士論文の一環として、出身大学で開発されたオブジェクト指向言語のコンパイラを書いています。現在、コンパイラは、仮想マシン上で実行されるアセンブラを出力します。仮想マシンは、スタック操作、オブジェクト生成、ヒープ管理、ガベージ コレクションなどのすべてを処理します。
私のコンパイラのターゲット アーキテクチャは、MIPS に似た CPU です。
オブジェクトのレイアウトを開発するための戦略と、実行時にガベージ コレクションを実装してトリガーするためのアイデアを探しています。もちろん、GCC がこれを C++ でどのように実装しているかを分析することもできますが、いくつかの優れた出版物/リソースを紹介してもらいたいと思います。
objective-c - プログラミング言語の質問の作成
C に基づいてカスタム (小さな) プログラミング言語 (構文) を作成することを考えています。[testClass runThis:true]; のような演算子を使用して Apple がどのように Objective-C を実装したかわかりません。その構文で。
カスタム C 言語のカスタム構文を実装する方法
programming-languages - どのプログラミング言語に正規文法がありますか?
私は、(もしあれば)どの実世界のプログラミング言語が正規文法を持っているかについて興味があります(つまり、構文的に正しいすべてのプログラムのセットが正規です)。
この質問も参照してください:どのプログラミング言語が文脈自由ですか?。