【发布时间】:2015-03-20 20:39:52
【问题描述】:
我研究过解析器调用词法分析器,然后词法分析器将标记返回给它,但这一切是同时发生还是同时发生,词法分析器读取词位并将标记返回给解析器。
我们说词法分析器将令牌返回给解析器,但词法分析器将其存储在符号表中,那么解析器是否从符号表本身获取令牌,但是它是如何引用它的呢?
【问题讨论】:
-
在某些编译器中,符号表可能不会在第一阶段构建。因此解析器别无选择,只能为标记调用词法分析器。
我研究过解析器调用词法分析器,然后词法分析器将标记返回给它,但这一切是同时发生还是同时发生,词法分析器读取词位并将标记返回给解析器。
我们说词法分析器将令牌返回给解析器,但词法分析器将其存储在符号表中,那么解析器是否从符号表本身获取令牌,但是它是如何引用它的呢?
【问题讨论】:
您似乎误解了什么是符号表。词法分析器将字节流转换为词素流,根本不处理符号表(解析 C 语言时除外,解析器处理的符号表中的信息在词法分析器黑客中反馈给词法分析器:@987654321 @)。处理符号表是解析器的工作。
实际上,词法分析器可能包含一个返回词法标记的函数。因此,如果词法分析器是以这种方式实现的,则令牌将作为词法分析器函数的返回值传递给解析器。
您应该尝试使用 lex/yacc(或 flex/bison)。实现自己的解析器,然后查看这些工具生成什么样的代码,会让您了解词法分析器和解析器是如何协同工作的。相信网上有很多关于 lex/yacc 的好教程。
【讨论】: