gpt4 book ai didi

c++ - 在 boost::spirit mini_c 中实现 "NOT"

转载 作者:行者123 更新时间:2023-11-28 03:56:03 26 4
gpt4 key购买 nike

我尝试修改 boost::spirit 的 mini_c 示例以匹配我现有的词汇表。

因此,我添加了一个运算符“NOT,它的行为应该与“!”相同:

unary_expr =
primary_expr
| ("NOT" > primary_expr [op(op_not)]) // This does not work
| ('!' > primary_expr [op(op_not)])
| ('-' > primary_expr [op(op_neg)])
| ('+' > primary_expr)
;

我可以编译修改后的源代码,但是当我尝试执行它时它无法解析。我该如何解决这个问题?

编辑:由于我想访问外部变量,我做了另一个修改,以便在编译时构建这些变量的列表:

identifier %=
raw[lexeme[alpha >> *(alnum | '§' | '_' | '.' | '-' )]]
;
variable =
identifier [add_var(_1)]
;

其中add_var和identifier定义为

rule<Iterator, std::string(), white_space> identifier;
function<var_adder> add_var;

如果我不使用这个修改,可以使用“NOT”。修改后,使用“NOT”会产生解析错误。

编辑 2:以下条件表达式确实有效:

logical_expr =
relational_expr
>> *( ("AND" > relational_expr [op(op_and)])
| ("OR" > relational_expr [op(op_or)])
)
;

最佳答案

随着你的改变小测试:

int main()
{
return NOT 1;
}

解析成功并返回0。所以对我来说,什么对你不起作用并不明显。您能否也提供一个失败的输入示例?

关于c++ - 在 boost::spirit mini_c 中实现 "NOT",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3591533/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com