问题标签 [symbol-table]

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 回答
134 浏览

compiler-construction - 编译器:符号表如何从源机器传递到目标机器?

前端和后端都使用符号表,但是假设目标代码将在不同的机器上运行,符号表如何传递给后端?它会以某种方式“附加”到中间表示,还是会包含在逻辑地址空间的实例中?

0 投票
1 回答
513 浏览

c - 如何从符号表中获取全局变量定义?

我正在使用 C/C++ 语言的 Visual Studio 2005 或 2010 进行开发。我想从二进制或执行文件中的符号表中获取全局结构定义信息。下面举个例子。一个名为“TD”的全局结构和结构中的三个成员。代码编译后,信息将在符号表、PDB 符号文件或 DBG 文件中。是否有任何一组函数可以从符号表中提取信息?我可以得到一个成员的大小和这个成员的类型吗?

0 投票
0 回答
685 浏览

compiler-construction - 是否对符号表使用堆栈

我正在创建一个编译器,并且遇到了一些文本,这些文本提出了两种不同的实现符号表的方法。使用一个,每个嵌套级别都有一个符号表,存储在堆栈中。使用第二个选项,只有两个符号表,一个符号表用于维护所有条目,另一个用于跟踪对主表的更改,以便在您通过后知道要删除哪些条目那个特定的块。这些不同实现的优点和缺点是什么?我敢肯定,就删除单个块的符号表而言,第一个选项会更快,但这会带来一些开销(我不清楚)。第二个显然是资源密集型的,因为要删除具有许多声明的大块,

0 投票
2 回答
593 浏览

c++ - 是否应该避免使用未命名的命名空间函数来减少符号表的大小?

我听说它断言在 C++ 中使用未命名的命名空间来定义函数并确保不能从定义它们的编译单元外部调用它们在非常大的代码环境中不好,因为它们会导致符号表增长通过在 C++ 编译器在未命名时提供的自动生成的命名空间中包含这些符号的条目而不必要地大。

这可能是因为上述内容应该与执行以下操作相同:

然而,真的那么简单吗,编译器是否需要为生成的命名空间名称中的符号创建符号表条目?

相反,在这种情况下,我听说它建议使用静态声明:

在函数之前使用静态声明而不是将其放置在未命名的命名空间中是否具有使函数在定义它的编译单元之外无法访问的相同效果?除了可能不会导致符号表增长之外,这两种方法之间是否有任何区别?

由于未命名的名称空间导致的符号表膨胀问题只是 C++ 的某些实现中的一个错误,还是标准要求编译器以某种方式为此类函数创建条目?如果这种膨胀被认为是一个错误,那么是否有已知的编译器不存在这问题?

0 投票
5 回答
16927 浏览

c - 变量名如何存储在 C 中的内存中?

在 C 中,假设您有一个名为variable_name. 假设它位于0xaaaaaaaa,并且在该内存地址处,您有整数 123。换句话说,variable_name包含 123。

我正在寻找有关“variable_name位于0xaaaaaaaa”的措辞的说明。编译器如何识别字符串“variable_name”与该特定内存地址相关联?字符串“variable_name”是否存储在内存中的某个位置?编译器是否只是在看到它时替换variable_name0xaaaaaaaa,如果是这样,它是否不必使用内存来进行替换?

0 投票
2 回答
287 浏览

perl - 解释这个巫术!!!(在 Perl 中,使用 Moose 和 namespace::autoclean)

所以这些天我正在处理一个使用 Perl 和 Moose 的项目。我了解 Moose 是建立在 MOP 之上的。我对MOP不是太熟悉,也遇到过不明白的,可以用理论上的解释。这是模块namespace::autoclean的文档:

所以,在我使用 Moose 之前,您在对象上调用方法的方式是:Perl 解释器会在您的对象被祝福到的包的符号表中查找该方法(然后,如果没有找到,请考虑@ISA继承等)。它从包中调用导入函数的方式是:它在包的符号表中查找函数的名称。据我所知,无论哪种方式,这意味着相同的符号表,所以这种行为应该是不可能的。

我对源头的初步检查没有成效。从广义上讲,当使用 Moose、MOP 和 namespace::autoclean 时,这种诡计变得可能有什么不同?

编。要特别清楚,如果我要替换use namespace::autoclean

那么Foo->bar;文档中描述的调用会崩溃,因为Foo->bar不知道在哪里可以找到imported_function.

0 投票
1 回答
5693 浏览

eclipse - 从语法构建符号表

我正在尝试使用 eclipse 从我的语法(用 antlr 完成)构建一个符号表。但是我不知道从什么开始。我想我在某处读到你需要 antlr 生成的解析器和词法分析器来做到这一点。有人知道一个简单的例子,以便我能理解它是如何工作的吗?

0 投票
2 回答
139 浏览

javascript - 在闭包中究竟是如何完成绑定的?

首先,您可以关闭s尚未定义的变量 ( )。如果使用词法(静态)作用域,这怎么可能?

第二,删除原来的sf()可以找到新的s。这是否意味着闭包绑定到变量名而不是引用或符号表索引或更机器级别的东西?我希望从 e 词法作用域闭包中抛出一个错误,因为原来s的被删除了。新的s只是重用了这个名字,和原来的没有任何关系s

第三,s匿名函数作用域内部不被 使用f(),这是否意味着词法作用域确实在起作用?

0 投票
2 回答
407 浏览

objective-c - Objective-C 的链接器和加载器

我最近看到了 John Levine 的书“Linkers and Loaders”。这本书写于 2000 年。如果有人读过他的书,作者所说的一切是否仍然与 2013 年的 Objective-C 相关?我在问,因为它看起来像是一本好书放在我的书架上,但如果信息已经过时,我可能不想真正研究这本书。

谢谢!

0 投票
1 回答
2657 浏览

compiler-construction - 编译器:填充符号表的最佳方法是什么?

我想为微型 C 语言构建我自己的编译器:我已经制作了我的语法,使用 ANTLR 构建了一个 AST(抽象语法树),并实现了我的符号表(遵循 Grosemberg 代码

我必须用我的符号填充我的符号表,但我真的不知道如何..

  • 我是否必须通过 y AST 并根据我找到的令牌在我的符号表中放置一个新符号或创建一个新范围...?
  • 我是否必须在我的语法中使用语义函数,我听说过 tree Walker...?

这一步我有点迷茫,有人有例子吗,或者可以告诉我该怎么做吗?