Uda*_*day 4 boost boost-spirit boost-spirit-lex
要实现对typedef的支持,当lexer识别标识符并返回不同的标记时,您需要查找符号表.这在flex lexer中很容易完成.我试图使用boost Spirit来构建解析器并在示例中查看,但它们都没有在词法分析器和解析器之间传递任何上下文信息.在mini c编译器教程示例中,最简单的方法是什么?
这在Spirit.Lex中同样容易.您所需要的只是在匹配令牌之后但在将令牌返回到解析器之前调用代码的能力.这是词法语义行为:
this->self += identifier[ lex::_tokenid = lookup(lex::_val) ];
Run Code Online (Sandbox Code Playgroud)
where lex::_tokenid占位符引用当前令牌的令牌id,lex::_val指的是匹配的令牌值(此时最可能是iterator_range<>指向底层输入流),而lookup是一个惰性函数(即函数对象,如a phoenix::function)实现实际的查找逻辑.
我将尝试找一些时间来实现一个小例子,以加入Spirit演示这种技术.