terminology - 在编译器构造中,符号是否与标记相同?

标签 terminology token symbols compiler-construction

在编译器构造中,当您谈论 token 时, token 是否与符号相同/只是符号的另一个术语?经过一些研究,我想明白了, token 是一个引用符号表的符号,因此某种属性符号/带有一些附加信息的符号?感谢您的任何澄清:-)

最佳答案

token 不一定是符号表中的符号。
例如,如果一个标记是一个保留字,那么它就不会被输入到符号表中。如果 token 是标识符,那么它很可能会被输入到符号表中。

以下面的声明为例:

char s[100];

词法分析器可以输出以下标记:
<"char", IDENTIFIER>

根据实现,它可以被识别为保留字或作为预定义的类型名称输入符号表中(我在这里不是 100% 确定),
<"s", IDENTIFIER>

“s”作为变量标识符输入符号表,
<"[", OPEN_SQUARE_BRACKET>

未输入符号表,
<"100", INTEGER_LITERAL>

未输入符号表,
<"]", CLOSE_SQUARE_BRACKET>

未输入符号表,
<";", SEMI_COLON>

未输入符号表。

因此,您基本上只在符号表中输入您稍后在编译过程中需要引用的那些标记。例如,稍后在函数体中,当您发现
strcpy(s, "Hello, world\n");

您再次识别标记 <"s", IDENTIFIER> 并在符号表中查找它。符号表会说“s”已被声明为 char [] 类型的变量。

所以,我会说 token 是词法分析器识别的任何输入块,并且仅输入具有特殊含义的某些标记作为 符号 在符号表中。

关于terminology - 在编译器构造中,符号是否与标记相同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6872865/

相关文章:

javascript - 如何标记 getElementById、getElementsByTagName 或 querySelector 等函数?

angularjs - 提交消息中的 "CL"是什么意思?它代表什么?

rest - 如果基于 cookie 的身份验证与 REST API 一起使用,那么同一个 API 如何与移动应用程序一起使用?

php - PHP脚本现在在PHP 5.3下收到错误?

security - 身份验证 token 已加密但未签名 - 弱点?

wolfram-mathematica - 向 $ContextPath 公开符号

java - getContext() 不存在

css - 为什么 CSS 接受 'grey' 而不是 'colour' ?

clojure - 为什么 clojure 中的 Symbol 可以用作函数?

terminology - 粗粒度与细粒度