当前位置: 首页 > 知识库问答 >
问题:

语法规则优先是如何工作的?

戚勇
2023-03-14

这是我的语法文件:

https://github.com/frankdu/minijs/blob/master/antlr/src/main/resources/org/minijs/parser/antlr/javascript.g4

问题在于语句解析。当它看到break语句时

https://github.com/frankdu/minijs/blob/master/core/src/test/java/org/minijs/core/parser/breakstatementtest.java

共有1个答案

濮阳和泰
2023-03-14

规则优先级是如何工作的?

它的工作方式与您想象的一样:规则中的备选项按照定义的顺序进行匹配。

真正的问题是,您在关键字规则之前定义了identifier规则。因此,输入“break”被标记为标识符并因此被匹配为PrimaryExpression

// Keywords
VAR:        'var';
IF:         'if';
WHILE:      'while';
DO:         'do';
FOR:        'for';
CONTINUE:   'continue';
BREAK:      'break';
RETURN:     'return';
FUNCTION:   'function';
NEW:        'new';
DELETE:     'delete';
IN:         'in';
INSTANCEOF: 'instanceof';

IDENTIFIER
    :   [a-zA-Z$_] [a-zA-Z0-9$_]*
    ;
 类似资料:
  • 本文向大家介绍ANTLR 优先规则,包括了ANTLR 优先规则的使用技巧和注意事项,需要的朋友参考一下 示例 几个词法分析器规则可以匹配相同的输入文本。在这种情况下,令牌类型将选择如下: 首先,选择与最长输入匹配的词法分析器规则 如果文本与隐式定义的标记匹配(例如'{'),请使用隐式规则 如果多个词法分析器规则匹配相同的输入长度,请根据定义顺序选择第一个 以下是组合语法: 给出以下输入: 将从词法

  • 我对Perl非常陌生,希望创建一种具有优先使用新的Perl 6语法功能的运算符的域特定语言。例如以正确的方式解析“1 2*6”。 到目前为止,我所找到的文档(例如本文)还没有针对具有优先声明的运算符的语法规则的示例。 我有一个非常简单的例子 这给了我 我只想构造一个抽象语法树。

  • 主要内容:JSON 中的键,JSON 中的值,JSON 与 JavaScript 对象的区别JSON 的语法与 JavaScript 中的对象很像,在 JSON 中主要使用以下两种方式来表示数据: Object(对象):键/值对(名称/值)的集合,使用花括号定义。在每个键/值对中,以键开头,后跟一个冒号,最后是值。多个键/值对之间使用逗号分隔,例如; Array(数组):值的有序集合,使用方括号定义,数组中每个值之间使用逗号进行分隔。 下面展示了一个简单的 JSON 数据: 注意:所有

  • CSS 样式由一系列规则组成,这些规则由 Web 浏览器解析,然后应用于 HTML 文档相应的元素上。CSS 样式规则由三个部分组成,分别是选择器、属性和值: 选择器:由 HTML 元素的 id、class 属性或元素名本身以及一些特殊符号构成,用来指定要为哪个 HTML 元素定义样式,例如选择器就表示为页面中的所有标签定义样式; 属性:您希望给 HTML 元素设置的样式名称,由一系列关键词组成,

  • 问题内容: 简而言之,我正在实现一个图形,现在正在研究Kruskal,我需要一个优先级队列。我对优先级队列的定义是,具有最小密钥的元素将排在最前面?错了吗 因为当我在队列中插入加权边(或数字)时,它们不会最终排序。 那会打印出来;[1、54、51、102、99、55]。这不是我希望他们成为的那样!是的,我制作了一个进入优先级队列的编译器,该队列从边缘对象中提取数字并根据该int进行比较。因此,这应

  • 我有以下案文: 在第一步中,下面的映射是tacking place: JAPE规则: 我不明白为什么-rule是匹配的,而不是。