ste*_*wpf 13 compiler-construction symbols terminology token
在编译器构造中,当你谈论令牌时,一个令牌就像一个符号/只是一个符号的另一个术语?经过一些研究后,我想要明白,令牌是一个带有符号表参考的符号,因此某种归属符号/带有一些额外信息的符号?谢谢你的任何澄清:-)
Gio*_*gio 15
令牌不一定是符号表中的符号.例如,如果令牌是保留字,则它不会输入到符号表中.如果令牌是标识符,则可能会在符号表中输入.
以下面的声明为例:
char s[100];
Run Code Online (Sandbox Code Playgroud)
词法分析器可以输出以下标记:
<"char", IDENTIFIER>
Run Code Online (Sandbox Code Playgroud)
根据实现,它可以被识别为保留字或作为预定义的类型名称输入到符号表中(我不是100%肯定在这里),
<"s", IDENTIFIER>
Run Code Online (Sandbox Code Playgroud)
"s"作为变量标识符输入到符号表中,
<"[", OPEN_SQUARE_BRACKET>
Run Code Online (Sandbox Code Playgroud)
未输入符号表,
<"100", INTEGER_LITERAL>
Run Code Online (Sandbox Code Playgroud)
未输入符号表,
<"]", CLOSE_SQUARE_BRACKET>
Run Code Online (Sandbox Code Playgroud)
未输入符号表,
<";", SEMI_COLON>
Run Code Online (Sandbox Code Playgroud)
没有输入符号表.
因此,您基本上只在符号表中输入稍后需要在编译过程中引用的标记.例如,稍后在函数体中,当您找到时
strcpy(s, "Hello, world\n");
Run Code Online (Sandbox Code Playgroud)
你再次识别标记<"s",IDENTIFIER>并在符号表中查找它.符号表将声明"s"已声明为char []类型的变量.
因此,我会说令牌是词法分析器识别的任何输入块,并且只有特定含义的某些令牌在符号表中作为符号输入.