问题标签 [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.
compiler-construction - 编译器如何处理符号表中的默认值
一些编程语言允许参数在函数调用中具有默认值或结构中的属性具有默认值。像 python 或 javascript 一样,当我们在函数调用中省略一些参数时,函数中的默认值将被替换(就像 struct 也可以在属性中具有默认值一样)。那么编译器实际上是如何处理这个问题的呢?特别是在符号表中?我想为指向默认值的指针添加一个额外的属性我猜默认值在运行时推送到堆栈上?请让我知道我是否正确。谢谢。
更新:
这里的默认值我的意思是在 Python 中说,以下程序参数b
具有默认值0
。
我们会得到结果0
和1
。那么编译器在运行时或编译时是如何处理的呢?
string - 基于解析字符串的变量名
我想根据解析的字符串命名我的变量。
例如:如果在字符串中解析 == 'dog':我的变量名应该等于 dog 并且它的值是字符串 'dog'
localization - LWUIT 符号表
我遇到了符号表的问题。在本地化的帮助下,我在我的LWUIT应用程序中使用波斯语和英语。
现在我的问题是,当我按下任何移动设备的 * 按钮时,一些符号表字符被翻译成波斯字符,而一些保持不变。
我该如何解决这个问题?
c++ - 在矢量 C++ 中保存大数据
我在一个文件中有大量数据,我需要读取并对其进行一些概率处理,因此我需要计算整个文件中每个单词的出现次数并对其进行更多计算。这些文件包含 100 万条半记录,每条记录大约 6 个字符串。我使用向量来保存这些数据,但程序在保存大约 8000 条记录后崩溃。有没有办法将此向量保存在计算机上而不是程序的内存中?!.. 或者我从搜索中听到了一种叫做符号表的东西,但我不明白它是什么意思或如何使用它。
这个问题的任何解决方案?
这是主文件
元组.h
和 VerbPair.h
java - 访问 .class 文件中的符号表
对于 Java 中的任意代码库,我想(从概念上)创建符号和类型之间的 USES 和 USED-BY 关系的表。符号表有我需要的信息。然而,编写前端似乎是一项艰巨的任务,并且有可能将我的项目变成一个更大的子项目。没有理由这样做,在我看来,因为字节码,Java .class 文件必须在其中包含每个类的这样一个符号表,以便它可以解析类型和引用。
我的问题是——
如何以编程方式访问一组 .class 文件中的符号表,以便创建所需的 USES / USED-BY 表?有没有人已经这样做了(肯定答案是肯定的)并且执行此操作的工具还不是库吗?
java - Java 方法的内部标识是什么?
众所周知,在Java中,方法名不足以区分不同的方法。
我认为(可能是错误的),要区分一个方法,它需要以下信息:
更远,
- 如何在内部更有效地识别方法?
- 我听说过“方法ID”。是不是意味着上面的三元组和一个整数之间存在映射关系,所以JVM解析后只使用方法id?
- 如果是这样,它是否位于符号表中?
谢谢!
f# - 解释器可以用符号表来实现吗?
我经常听说使用符号表可以优化编程语言中符号的查找。目前,我的语言仅作为解释器实现,而不是编译器。我还不想分配时间来构建编译器,所以我正在尝试优化解释器。该语言大部分基于 Scheme 语义和语法,并且是静态范围的。我使用 AST 在运行时执行代码(在我的解释器中,就像Write Yourself a Scheme in 48 Hours
.
不幸的是,由于使用 F# Map 来按名称包含和查找符号,我的解释器中的符号查找速度很慢。(好吧,事实上,它使用了 Trie,但性能同样有问题)。我想改用符号树来实现更快的符号查找。但是,我不知道是否或如何在解释器中实现符号表。我只在编译器的上下文中听说过它们。
这可能吗?如果实现策略或性能与编译器中的符号表不同,您能描述一下差异吗?最后,我可能会在解释器中查看符号树的现有参考实现吗?
谢谢!
gdb - gdb 没有为核心文件加载符号表
在客户端为我的应用程序生成了一个核心转储,在查看回溯时我没有加载符号......
我想在这里提到的一个想法是,正在使用的应用程序是使用 -g 选项构建的。
对我来说,似乎没有加载所需的库。我尝试使用“符号文件”手动加载库,但这无济于事。
可能的问题是什么?
c - 如何从另一个模块调用导出的内核模块函数?
我正在编写一个 API 作为内核模块,为设备驱动程序提供各种功能。我在mycode.c中写了三个函数。然后我构建并加载了模块,然后将mycode.h复制到< kernel >/include/linux中。在设备驱动程序中,我有一个#include < linux/mycode.h >并调用这三个函数。但是当我构建驱动程序模块时,我收到三个链接器警告,说这些函数是 undefined。
笔记:
- 这些函数在 mycode.h中声明为extern
- 使用mycode.c中的EXPORT_SYMBOL(func_name)导出函数
- 运行命令 nm mycode.ko 将所有三个函数显示为在符号表中可用(它们旁边的大写 T,表示符号在文本(代码)部分中找到)
- 加载模块后,命令grep func_name /proc/kallsyms显示所有三个函数都已加载
很明显,这些函数被正确导出,内核知道它们是什么以及它们在哪里。那么为什么司机看不到他们的定义呢?知道我错过了什么吗?
编辑:我在这里找到了一些关于此的信息:http: //www.kernel.org/doc/Documentation/kbuild/modules.txt
有时,外部模块使用来自另一个外部模块的导出符号。kbuild 需要完全了解所有符号,以避免发出有关未定义符号的警告。针对这种情况存在三种解决方案。
注意:建议使用顶级 kbuild 文件的方法,但在某些情况下可能不切实际。
使用顶级 kbuild 文件 如果你有两个模块,foo.ko 和 bar.ko,其中 foo.ko 需要来自 bar.ko 的符号,你可以使用一个通用的顶级 kbuild 文件,这样两个模块在同一个编译建造。考虑以下目录布局:
顶级 kbuild 文件将如下所示:
并执行
然后将执行预期并编译两个模块,并充分了解任一模块的符号。
使用额外的 Module.symvers 文件 构建外部模块时,会生成一个 Module.symvers 文件,其中包含所有未在内核中定义的导出符号。要从 bar.ko 访问符号,请将 Module.symvers 文件从 bar.ko 的编译复制到构建 foo.ko 的目录。在模块构建期间,kbuild 将读取外部模块目录中的 Module.symvers 文件,当构建完成时,会创建一个新的 Module.symvers 文件,其中包含所有已定义符号的总和,而不是内核的一部分。
使用“make”变量 KBUILD_EXTRA_SYMBOLS 如果从另一个模块复制 Module.symvers 不切实际,您可以在构建文件中为 KBUILD_EXTRA_SYMBOLS 分配一个以空格分隔的文件列表。这些文件将在 modpost 的符号表初始化期间加载。
但是对于所有这三种解决方案,为了让任何驱动程序使用我的 API,它必须要么创建一个新的 Makefile 要么直接访问我的 Module.symvers 文件?这似乎有点不方便。我希望他们能够#include 我的头文件并且一切顺利。不存在其他替代方案吗?
eclipse - Eclipse 抱怨“未加载符号表”,而 elf 文件包含调试信息
我正在研究 STM32 处理器。使用 readelf -w,可以从我的 elf 文件中提取大量调试信息。一小段输出如下所示:
dwarfdump 还确认调试信息在 elf 文件中可用。
我正在使用以下软件包:Eclipse Juno arm-2011.03/bin/arm-none-eabi-gdb OpenOCD 和 JTAG 密钥
生成elf文件后,将其烧录到STM32处理器中,并在Eclipse中启动调试会话。JTAG 可以启动和停止,所以我猜 OpenOCD 守护进程很好。由于“未加载符号表”,无法设置断点。我注意到的一件事是在“变量/断点/寄存器/模块”窗口中,显示加载的 elf 文件的模块选项卡包含以下详细信息:类型:可执行符号:未加载符号文件:BuildResult.elf
在调试配置->启动选项卡中,选中/取消选中“加载图像/加载符号”没有区别。我想知道eclipse如何将包含符号信息的elf文件加载到调试过程中?
非常感谢任何建议,提示。