问题标签 [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.

0 投票
1 回答
130 浏览

language-design - 在赋值语句中自动提升右侧表达式的编译器类型

为什么编译器不将赋值表达式右侧的所有表达式求值提升到至少左侧的类型级别?

例如“double x = (88.0 - 32) * 5 / 9”可以正确地从华氏温度转换为摄氏温度,但是...“double x = (88.0 - 32) * (5 / 9)”不会。

我的问题不是为什么第二个示例没有返回所需的结果。我的问题是为什么编译器不将 (5/9) 的评估提升为双精度。

0 投票
0 回答
83 浏览

compiler-construction - 部分编译器计算算术运算

编译器的哪一部分计算算术运算?

前任-

部分计算打印功能(词汇、语法、语义)

我正在尝试编译器

0 投票
1 回答
74 浏览

clang - Clang 和 Zig 的 main 函数中的编译器设计前端计算

我已经开始阅读clangand的源代码了zig-lang。不幸的是,源代码很复杂,我无法找出这些编译器的前端在主函数中调用的位置。

clang中,我找到的更近的地方是这里,但它看起来不像处理编译前端。

zig-lang中,主要功能更加混乱,难以理解。我只是可以在这里找到事实上的主要功能(main0)。

虽然,解释这些编译器的阶段并指向他们的代码是值得赞赏的,但对我来说,仅仅调用前端计算的地方就足够了。

0 投票
0 回答
74 浏览

compiler-construction - 如何为具有嵌套函数的语言设计中间表示?

我正在为具有嵌套函数的语言编写编译器。

我决定使用 display 从内部函数访问外部函数的局部变量,我不知道如何表示将激活记录写入中间表示的显示数组,因为为此我需要访问堆栈指针寄存器,即机器依赖。

还有另一种解决方案,不是将激活记录的写入翻译成中间表示,我可以将此步骤推迟到编译的最后阶段,它会进行机器相关的翻译。

所以,我的问题是:

哪个解决方案更好,如果是第一个,如何表示将激活记录写入以中间表示形式显示数组?

0 投票
1 回答
88 浏览

c++ - 如何将 C/C++/Rust 编译器默认十进制数字基数设置为十六进制基数?

看起来十六进制数字对 c/c++/rust iot 编程很有用。下面是支持十六进制数字的图像。 heksbin 数字从 1 到 vnti

heksbin 数字从一到 vnti vn 到 tuti

我正在寻找 rust 编译器,其中十六进制是整数 float 的默认基数。ascii_510(5+5=10) --> hskii_810(8+8=10=4X4)

int10 a = 484; B // ascii_510 rust 中的上述行将如下所示: int16 a = 0x484B ; 因此,请提供提示如何以及更改 rust 源中的哪些文件。 hskii_810

0 投票
1 回答
90 浏览

c - C 语法生成无效表达式

我正在阅读一本名为 A Retargetable C Compiler: Design and Implementation 的书。在本书中,C 语言语法是这样指定的:

我对我观察到的一些事情有疑问:

unary-expression assign-operator assignment-expressionassignment-expression.

我选择"sizeof '(' type-name ')'" 一元表达式。

然后我选择"="分配运算符。

然后我选择"conditional-expression"了赋值表达式。

然后我得出这样的结论:

conditional-expression -> binary-expression -> unary-expression ->postfix-expression -> primary-expression -> identifier

作为以上所有的结果,我可以生成这样的表达式: "sizeof(int) = 7".

但是这个表达式在 C 语言中是不可能的。上面的语法列表是否有问题,或者我以错误的方式产生这个表达式?

0 投票
1 回答
62 浏览

assembly - 编译器开发的汇编语言

我尝试构建一个小型编译器,并完成了 Lexer 和 Parser。现在我需要创建汇编代码生成器的一部分。所以我有一些问题!

实际上我可以很好地C并且我为这个任务学习了 NASM 汇编。现在我可以使用 NASM 制作一些程序。但我不明白如何为编译器实现汇编,我的意思是汇编生成部分。

  • 我需要精通汇编语言吗?
  • 或者有这方面的教程吗?(编译器开发<->实现汇编)

谢谢你^-^

0 投票
1 回答
86 浏览

c - 为什么我们在编译器设计的词法分析中将字符串视为单个标记?

我正在学习编译器设计。编译器中词法分析器的任务是将代码转换为令牌流。但我很困惑为什么我们将字符串视为单个标记。例如 -printf("%d is integer", x);在这个语句printf中,(, "%d is integer", ,, x, ),;是标记,但为什么%din string 不被视为单独的标记?