【发布时间】:2014-07-11 22:21:14
【问题描述】:
我正在尝试在我的 boost spirit qi 语法中实现一个规则,该规则的行为类似于 Lisp 语言中的 QUOTE。
类似:QUOTE(a b c)
这个想法是,QUOTE 的左括号和右括号之间的任何内容都将被捕获到字符串文字中,而不是被进一步解析。
由于 '(' 或 ')' 字符可能出现在 QUOTE 中, 我不能使用:'\"' >> *~char_('\"') >> '\"' 而是需要跟踪括号以确定引号的结尾。
例如:QUOTE(a ( b c ) d) 在这里,我想将内容 "a ( b c ) d" 解析为字符串文字。
我可以想到几种方法来做到这一点,一般的想法是保留一个局部变量来增加/减少括号深度等。
由于语义操作效率低下,我希望有人可以评论解决此问题的有效方法。
谢谢!
【问题讨论】:
-
语义操作如何低效?它们在编译时可能很麻烦而且很慢。但它们通常也非常有效。 (如果不是,通常是语法)。但是see here 表示语义操作的一些缺点
标签: c++ boost boost-spirit boost-spirit-qi