boost - 如何向基于 boost::spirit::lex 的词法分析器添加符号表接口(interface)?

标签 boost boost-spirit boost-spirit-lex

要实现对 typedef 的支持,您需要在词法分析器识别标识符并返回不同标记时查找符号表。这在 flex lexer 中很容易完成。我正在尝试使用 boost Spirit 来构建解析器并查看示例,但它们都没有在词法分析器和解析器之间传递任何上下文信息。在 mini c 编译器教程示例中执行此操作的最简单方法是什么?

最佳答案

这在 Spirit.Lex 中同样容易。您所需要的只是在匹配 token 之后、但在将 token 返回给解析器之前调用代码的能力。那是词法分析器语义 Action :

this->self += identifier[ lex::_tokenid = lookup(lex::_val) ];

在哪里 lex::_tokenid是一个占位符,引用当前 token 的 token ID,lex::_val指的是匹配的标记值(此时很可能这是一个 iterator_range<> 指向底层输入流),并且查找是实现实际查找逻辑的惰性函数(即函数对象,例如 phoenix::function )。

我将尝试找一些时间来实现一个小示例,以添加到 Spirit 中来演示此技术。

关于boost - 如何向基于 boost::spirit::lex 的词法分析器添加符号表接口(interface)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7006069/

相关文章:

c++ - 将解析结果自动串联成 vector

c++ - boost spirit x3 双解析器有限制

c++ - 转换为 token_def 的值类型

c++ - Boost::ptr_vector 改变元素顺序

c++ - 如何在运行时填充 boost::fusion::vector?

c++ - 使用 boostspirit 将 int 对解析为 vector

c++ - 无法编译 boost spirit example4.cpp

c++ - Spirit X3解析器启动状态?

c++ - 从 std::thread 调用 boost::asio::io_service::run

c++ - 尝试构建 Boost.Log 示例时出现链接错误