要实现对 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/