- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
"-6ren"> "-我正在尝试解析 predicate -> action 形式的 rule。 我的问题是 predicate 可以是任何有效的数学表达式,因此它实际上可能包含减号或更大的符号(但我们必须按顺序禁止它们因-6ren">
我正在尝试解析 predicate -> action
形式的 rule
。
我的问题是 predicate
可以是任何有效的数学表达式,因此它实际上可能包含减号或更大的符号(但我们必须按顺序禁止它们因为这是我们想要将 predicate
与 action
分开的标记。
本质上,我希望 predicate
消耗所有非空格,直到它遇到字符串 "->"
。
我是如何做到这一点的?
是修复我在下面评论的行的正确方法,还是我应该根据有效表达式更好地定义什么是 predicate
,并让解析器落入 "->"
当 predicate
结束时,根据那个有效的表达式?
rule %=
predicate
>> "->"
>> action
;
predicate %= (+~(qi::char_("-"))); // BAD: works only if no minus sign in predicate
action %= (+(qi::char_));
最佳答案
将 predicate
改写如下:
predicate = +(qi::char_ - "->");
action = +(qi::char_);
等价地,
predicate = +(!qi::lit("->") >> qi::char_);
应该做同样的事情。
查看文档
关于c++ - 振奋精神 : how to parse until we have "->",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13508690/
我需要通过 boost spirit 创建一条规则,以匹配以下情况 return foo; 和 return (foo); 我试过这样的: start %= "return" >> -boost::s
我想以这种形式解析一个函数(具有任意名称和任意数字的参数): function(bye, 1, 3, 4, foo) 参数可以是逗号分隔的通用字符串。我想复制函数的名称和字符串 vector 中的参数
我想将 C++ 函数声明与默认参数值匹配,但忽略这些值。例如: int myFunction(int a, int b = 5 + 4); 这是词法分析器的(一部分): struct Lexer :
我正在重构一个类型系统(类型模型),它使用 spirit 进行字符串序列化。我正在使用类型特征的编译时建模构造。 template<> type_traits { typedef boost:
我想实现一个需要解析实例名称和路径的语法,其中路径是由分隔符分隔的实例名称列表。分隔符可以是 .(句点)或 /(斜杠),在输入文件中列出路径之前给出,例如: DIVIDER . a.b.c x.y.z
我使用 boost spirit 来解析数学表达式并遇到了一个问题,我将其提取到以下代码中。 有一个带有一个标记的简单词法分析器,具有一个保存匹配字符串的属性。解析器定义了一个规则,该规则旨在获取 t
我设法将一个 pgn 文件解析为多个游戏 mainly thanks to this forum . 但是,由于我要处理的文件有很多游戏,在我最近使用的电脑上,这个过程可能需要两分钟。这就是为什么我想
我有一个表达式语法的最小示例(仅限算术表达式),只有当完整的输入是一个有效的算术表达式时,它才会成功。在我看来,即使子序列导致解析器的开始符号,解析器也会报告成功。 template s
我想解析一个 double vector 。然而,这个 vector 也可能包含两种类型的语句,它们对数据进行了一定程度的压缩:FOR和 RAMP . 如果FOR在字符串中,格式应该是" FOR "
我是一名优秀的程序员,十分优秀!