【发布时间】:2019-05-14 17:57:43
【问题描述】:
我正在尝试创建一个可以解析 C 代码的解析器。我的用例解析可能包含函数原型的缓冲区。我想将此函数名称推送到符号表中。我是 Spirit 和 PEG 的新手,我正在尝试弄清楚如何编写可以识别函数原型的规则。
这是我当前的实现:
auto nameRule = x3::alpha >> *x3::alnum;
auto fcnPrototypeRule = nameRule >> *nameRule;
auto fcnRule = fcnPrototypeRule >> space >> x3::char_('(') >> -(nameRule % ',') >> x3::char_(');');
这是我的应用程序代码:
class Parser {
public:
std::string functionParser(const std::string& input) {
std::string output;
x3::phrase_parse(input.begin(), input.end(), fcnRule, space, output);
return output;
}
};
输入为 = "extern void myFunction();" 输出是一个空字符串。我想得到函数原型。
【问题讨论】:
-
提升?
class?这不是 C,而是 C++。 -
它是一个分析 C 代码的 C++ 程序。
标签: c++ compiler-construction boost-spirit