【问题标题】:When does the lexical analyzer returns the token to the parser?词法分析器何时将标记返回给解析器?
【发布时间】:2015-03-20 20:39:52
【问题描述】:

我研究过解析器调用词法分析器,然后词法分析器将标记返回给它,但这一切是同时发生还是同时发生,词法分析器读取词位并将标记返回给解析器。

我们说词法分析器将令牌返回给解析器,但词法分析器将其存储在符号表中,那么解析器是否从符号表本身获取令牌,但是它是如何引用它的呢?

【问题讨论】:

  • 在某些编译器中,符号表可能不会在第一阶段构建。因此解析器别无选择,只能为标记调用词法分析器。

标签: compiler-construction


【解决方案1】:

您似乎误解了什么是符号表。词法分析器将字节流转换为词素流,根本不处理符号表(解析 C 语言时除外,解析器处理的符号表中的信息在词法分析器黑客中反馈给词法分析器:@987654321 @)。处理符号表是解析器的工作。

实际上,词法分析器可能包含一个返回词法标记的函数。因此,如果词法分析器是以这种方式实现的,则令牌将作为词法分析器函数的返回值传递给解析器。

您应该尝试使用 lex/yacc(或 flex/bison)。实现自己的解析器,然后查看这些工具生成什么样的代码,会让您了解词法分析器和解析器是如何协同工作的。相信网上有很多关于 lex/yacc 的好教程。

【讨论】:

  • 为了更准确地说,词法分析器通常会制造一个标记流。解析器可以以一对一的速率从流中获取标记,并填充词法流(这是一种常见的样式),或者它可以相对于流生成异步操作,允许(如 OP 建议的那样)词法分析并“同时”解析。
  • 实际上,先生,我无法理解符号表何时构建以及谁负责管理它的事实,虽然我阅读了维基百科,但它只会引起我的困惑,如下一段跨度>
  • 在计算机科学中,符号表是语言翻译器(例如编译器或解释器)使用的数据结构,其中程序源代码中的每个标识符都与与其声明或外观相关的信息相关联来源,例如它的类型、范围级别,有时还有它的“位置”。在下面对应于符号表的语句中,“位置”一词是什么意思?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-01-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-07
相关资源
最近更新 更多