我研究过解析器调用词法分析器,然后词法分析器将令牌返回给它,但是这一切都是立即发生,或者同时词法分析器读取词法并将令牌返回给解析器。
我们说lexer将令牌返回给解析器,但词法分析器将它存储在符号表中,因此解析器从符号表本身获取令牌,但是它是如何引用它的?
答案 0 :(得分:2)
您似乎误解了符号表是什么。词法分析器将字节流转换为词法流并且根本不处理符号表(除非在解析C语言时,解析器处理的符号表中的信息被反馈到词法分析器中的词法分析器:{{ 3}})。处理符号表是解析器的工作。
实际上,词法分析器可能包含一个返回词法标记的函数。因此,如果词法分析器以这种方式实现,则令牌将作为词法分析器函数的返回值传递给解析器。
你应该尝试使用lex / yacc(或flex / bison)。实现自己的解析器,然后查看工具生成的代码类型将使您了解词法分析器和解析器如何协同工作。我确信在互联网上有很多关于lex / yacc的好教程。