【发布时间】:2017-07-11 07:06:50
【问题描述】:
我有一个关于使用“>”运算符提升精神的语义动作的问题
我得到了这个完美的规则..
ifelse = (iter_pos >>
nocaselit(L"if") >> expression >> nocaselit(L"then") >>
block_statements_eol >> -ifelse_ifelse >> nocaselit(L"end") >> nocaselit(L"if") >>
iter_pos)
[_val = construct<common_node>(type_cmd_ifelse,LOCATION(_1,_5), key_cond, _2, key_seq, _3, key_else, phoenix::bind(&makeOptNode, _4))];
为了添加一些错误处理,我还将 on_error 内容添加到我的解析器中。据我了解,我还必须添加“期望点”以提高输出正确率
所以我将语法更改为这个(将>>替换为>)以提供有关停止回溯并报告错误的信息。
ifelse = (iter_pos >>
nocaselit(L"if") > expression > nocaselit(L"then") >>
block_statements_eol > -ifelse_ifelse > nocaselit(L"end") > nocaselit(L"if") >>
iter_pos)
[_val = construct<common_node>(type_cmd_ifelse,LOCATION(_1,_5), key_cond, _2, key_seq, _3, key_else, phoenix::bind(&makeOptNode, _4))];
此时我得到 _3 和 _4 的 C++ 编译器错误无效索引 .. 所以似乎必须以某种方式更改语义操作,但我不知道如何。
【问题讨论】:
标签: c++ boost-spirit