gpt4 book ai didi

compiler-construction - 编译器如何处理符号表中的默认值

转载 作者:行者123 更新时间:2023-12-04 18:23:44 25 4
gpt4 key购买 nike

一些编程语言允许参数在函数调用中具有默认值或结构中的属性具有默认值。像python或javascript一样,当我们在函数调用中省略一些参数时,函数中的默认值将被替换(就像struct在属性中也可以有默认值一样)。那么编译器实际上是如何处理这个问题的呢?特别是在符号表中?我想为指向默认值的指针添加一个额外的属性我猜默认值在运行时推送到堆栈上?请让我知道我是否正确。谢谢。

更新:
这里的默认值我的意思是在 Python 中,遵循程序参数 b有默认值 0 .

def foo(a, b=0):
return a+b
print foo(1)
print foo(1, 1)

我们会得到结果 01 .那么编译器在运行时或编译时是如何处理的呢?

最佳答案

不管你怎么做,你都必须将默认值与特定的标识符相关联。

参数列表和结构成员形成小的命名空间,编译器通常通过为这些命名空间构建符号表和跟踪命名空间如何相关的更大符号表来跟踪它们。

由于编译器通常已经在这些将其他信息与符号(例如,任何类型信息)相关联的小命名空间中具有符号表条目,因此这是一个非常自然的记录它的地方。

有一个问题是要为初始值记录什么。一件简单的事情就是简单地记录一个指向 AST 的指针,该指针表示初始/默认值。除此之外,还必须记录应该在其中评估该表达式的上下文(例如,“环境”)。该上下文通常可以隐含,因为它通常与定义结构/参数的上下文相同,并且该信息存储在将所有内容粘合在一起的更大的符号表中。

关于compiler-construction - 编译器如何处理符号表中的默认值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10168567/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com