我试图修改boost::spirit的迷你示例,以匹配我现有的词汇表。
因此,我添加了一个运算符“not that should behave equal as”!:
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)]
;
其中,添加变量和标识符定义为
rule<Iterator, std::string(), white_space> identifier;
function<var_adder> add_var;
如果我不使用这个修改,可以使用“不”。通过修改,使用“not”会生成解析错误。
编辑2:
但以下条件表达式确实有效:
logical_expr =
relational_expr
>> *( ("AND" > relational_expr [op(op_and)])
| ("OR" > relational_expr [op(op_or)])
)
;