我正在使用Jison编写一个解析器,它允许我解析一种相当复杂的表达式语言。在这种语言中,它支持语法,如:
stats_expression
: stats_function '(' eval_expression ')'
| other_stats_aggregation
;
stats_function
: SUM
| AVERAGE
| ...
;
这里的eval_表达式非常复杂(具有嵌套eval、逻辑表达式等功能),我不关心eval_表达式的内容,也不想花费太多精力解析它。我只想获得上述语法中的其他信息,比如stats_函数名。
我的问题是,在Jison中是否有任何方法允许我做一些通配符匹配来轻松匹配整个eval_expression,而无需为eval_expression编写完整的lexer/语法规范?
注意:像使用正则表达式而不是Jison来完成这项工作这样的解决方案对我来说不起作用,因为我需要用我为其编写的整个语法/解析器的语言来解析上面的其他_stats_aggregation
部分。
感谢任何帮助。
假设您不需要为任何其他目的完全解析eval_expression
(即,它不是表达式
的一部分),那么您唯一需要知道的是表达式的终止位置。假设它有平衡括号可能是合理的,所以它将跨越括号平衡的任何令牌序列,可以用以下方式识别:
balanced_paren_sequence:
| balanced_paren_sequence balanced_paren_object
;
/* Since jison has no wild cards, you need this complete list */
balanced_paren_object: '(' balanced_paren_sequence ')'
| '+' | '-' | '*' | '/' | ...
| `[` | `]` | '{' | '}' | ...
| IDENTIFIER | CONSTANT | ...
;
balanced_paren_object
的可能RHS列表将包括除(and)之外的所有语言令牌。如图所示,它包括其他平衡对,如[/]and{/}。
您也可以通过添加类似于balanced\u paren\u object
的第一个产品的规则来强制实现这些平衡,但这只对改进错误报告有用;如前所述,解析器将接受包含不平衡括号的某些不正确的构造,但由于您没有进行详细的解析,解析器最终还是会接受某些不正确的构造。
您可以将balanced_paren_object
的定义内联到balanced_paren_sequence
中(事实上,如果只有一种类型的表达式的详细解析树您不需要,您可以使用eval_expression
作为非终端的名称);我写它就像上面一样,只是为了清晰。
项目中经常会生成一些Git系统不需要追踪(track)的文件。典型的是在编译生成过程中 产生的文件或是编程器生成的临时备份文件。当然,你不追踪(track)这些文件,可以 平时不用"git add"去把它们加到索引中。 但是这样会很快变成一件烦人的事,你发现 项目中到处有未追踪(untracked)的文件; 这样也使"git add ." 和"git commit -a" 变得实际上没有用处,同时
我创建了一个小提琴,试图使用字体权重为300的Open Sans字体: HTML语言 CSS公司 我使用谷歌字体来定义CSS 我可以看到Firefox(Ubuntu 13.10)在字体粗细:300(轻量级)和字体粗细:400(正常)下渲染时有所不同,但在Chrome(版本33.0.1750.117)中没有差异,其中所有内容看起来都像是以字体权重:400呈现的。是我做错了什么还是 Chrome 中存
本文向大家介绍java 单例模式容易忽略的细节,包括了java 单例模式容易忽略的细节的使用技巧和注意事项,需要的朋友参考一下 java单例模式 直接讲实现单例模式的两种方法:懒汉式和饿汉式,单例模式的概念自己上网搜吧这里就不讲了! 这里会涉及到java中的jvm,如果你没有这方面的知识,我建议你先去补补,不然会有点迷糊! 首先说说类什么时候进行加载? java虚拟机没有进行强制性的约束,但是对于
我将WireMock作为独立进程启动: Java-jar wiremock-standalone-2 . 6 . 0 . jar-port 8080-v 还行。 当超文本传输协议请求内容后缀时 /api/profile/Favorite/WireMock必须返回存根响应。对所有其他请求必须通过WireMock忽略,并且必须转发到正式服。 我必须如何配置WireMock?
问题内容: 我想写一个像这样的doctest: 有什么办法吗?我认为切换到单元测试会更有意义,但我很好奇是否可以指定不适合doctest中的测试的输出范围。 谢谢! 问题答案: 使用,您可以用来表示“在此处匹配任何字符串”。您可以使用doctest指令设置选项,以使其仅在一个测试用例中处于活动状态:在线文档中的一个示例是: 如果您希望doctest选项始终处于活动状态,则可以将其作为参数传递给您使
问题内容: 我的xml文件如下: 我想忽略,我想在我的Unmarshaller流程中添加标签。 我的班级如下: 谢谢。 问题答案: 忽略 您可以创建一个经过过滤的StAX,并让JAXB取消编组以忽略一个或多个XML元素。 http://docs.oracle.com/javase/7/docs/api/javax/xml/stream/XMLInputFactory.html#createFilt