【问题标题】:In compiler construction, is a symbol the same as a token?在编译器构造中,符号和记号一样吗?
【发布时间】:2011-10-15 22:00:19
【问题描述】:

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

【问题讨论】:

    标签: terminology token symbols compiler-construction


    【解决方案1】:

    符号是该表中的 S=S 中的 GIVEN 常数,或该等式中的 Pi = Pi,而令牌表示在该条件下作为交换媒介的给定值。

    【讨论】:

      【解决方案2】:

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

      以下面的声明为例:

      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”已被声明为 char [] 类型的变量。

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

      【讨论】:

      • 非常感谢您的回复!我以某种方式混淆了符号表的名称;-)
      • 那么从上面开始 - 可以说输入符号表的所有标记实际上都是 - 只有标识符吗?即,哪些标记可能会被输入到符号表中,而不是标识符? ..符号的定义是否完全是标识符? (与其他标记“[”、“;”、“100”等相反。我在推测,我不知道。)
      • 据我所知你是对的:符号表中输入的唯一标记是标识符(函数、变量等)(另见en.wikipedia.org/wiki/Symbol_table
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-12-28
      • 2012-08-02
      • 2019-08-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多