在编译器构造中,当你谈论令牌时,令牌是一个象征符号/只是符号的另一个术语吗?经过一些研究后,我想要明白,令牌是一个带有符号表参考的符号,因此某种归属符号/带有一些额外信息的符号?谢谢你的任何澄清:-)
在编译器构造中,当你谈论令牌时,令牌是一个象征符号/只是符号的另一个术语吗?经过一些研究后,我想要明白,令牌是一个带有符号表参考的符号,因此某种归属符号/带有一些额外信息的符号?谢谢你的任何澄清:-)
令牌不一定是符号表中的符号。 例如,如果令牌是保留字,则它不会输入到符号表中。如果令牌是标识符,则可能会在符号表中输入。
以下面的声明为例:
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 []类型的变量。
所以,我会说一个 代币 是词法分析器识别的任何输入块,并且只输入具有特殊含义的某些标记作为 符号 在符号表中。
令牌不一定是符号表中的符号。 例如,如果令牌是保留字,则它不会输入到符号表中。如果令牌是标识符,则可能会在符号表中输入。
以下面的声明为例:
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 []类型的变量。
所以,我会说一个 代币 是词法分析器识别的任何输入块,并且只输入具有特殊含义的某些标记作为 符号 在符号表中。
符号是GIVEN常量IN THAT KEY,如该表中的S = S,或该等式中的Pi = Pi,而令牌表示在该条件下作为介质OF交换的给定。