問題タブ [compiler-development]
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.
language-design - 代入文での右側の式のコンパイラ タイプの自動昇格
コンパイラが代入式の右側の式のすべての評価を少なくとも左側の型レベルに型プロモートしないのはなぜですか?
たとえば、「double x = (88.0 - 32) * 5 / 9」は華氏から摂氏に正しく変換されますが、「double x = (88.0 - 32) * (5 / 9)」は変換されません。
私の質問は、2 番目の例が目的の結果を返さない理由ではありません。私の質問は、なぜコンパイラが (5/9) の評価を double の評価に型プロモートしないのかということです。
c - C 文法は無効な式を生成します
私は本 namad A Retargetable C Compiler: Design and Implementation を読んでいます。この本では、C 言語の文法は次のように規定されています。
私が観察したことについて質問があります:
に入れunary-expression assign-operator assignment-expression
ましたassignment-expression
。
"sizeof '(' type-name ')'"
単項式を選択します。
次に"="
、代入演算子を選択します。
次に"conditional-expression"
、代入式を選択しました。
次に、次のように導出します。
conditional-expression -> binary-expression -> unary-expression ->postfix-expression -> primary-expression -> identifier
上記のすべての結果として、次のような式を生成できます
"sizeof(int) = 7"
。
しかし、この表現はC言語ではできません。上記の文法リストに問題がありますか、それともこの表現を間違った方法で作成していますか?
assembly - コンパイラ開発用アセンブリ言語
私は小さなコンパイラを構築しようとし、Lexer と Parser を完成させました。次に、アセンブリ コード ジェネレーターの一部を作成する必要があります。だから私はいくつかの問題を抱えています!
実際、私はCが得意で、このタスクのために NASM アセンブリを学びました。これで、NASM を使用していくつかのプログラムを作成できるようになりました。しかし、コンパイラのアセンブリを実装する方法がわかりません。つまり、アセンブリ生成部分です。
- アセンブリ言語に習熟している必要がありますか?
- または、そのためのチュートリアルはありますか? (コンパイラ開発 <-> 実装アセンブリ )
ありがとう^ - ^