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

否定与antlr4中的运算符匹配失败

柯栋
2023-03-14
grammar nota;
word: WORD;
WORD: ~'a'; //match anything that isn't an 'a'

正如文档所描述的,这将否定单个给定字符或字符范围的字符集。

然后我尝试解析一些测试用例文本(每个测试用例输入一个字符):
a预期失败
B预期成功
+预期失败
§预期失败
\预期成功
/预期失败
/预期失败
~预期失败

如果有关系,我将使用NodeJS的antlr4ts 0.5.0-alpha.4.
默认错误监听器打印,例如

第1行:0输入“+”不匹配,需要单词

我是否误解了ANTLR的~操作符
这是应该报告的bug吗?我在github问题跟踪器里什么也没看到。

Edit:为了解决这个错误,我将语法更改为单词:'+'~'a';,但由于某种奇怪的原因,这个语法也与+不匹配。

grammar nota;
word: WORD | OPERATORS;
OPERATORS: '+'|'-'|'*'|'/'|'=';
WORD: ~'a';
grammar nota;
word: WORD | '+'|'-'|'*'|'/'|'=';
WORD: ~'a';

共有1个答案

羊舌光赫
2023-03-14

我不能用0.5.0-alpha.4复制它。

根据语法:

grammar nota;
word: WORD;
WORD: ~'a';

运行以下代码:

import { CharStreams, CommonTokenStream } from 'antlr4ts';
import { notaLexer } from './parser/notaLexer';
import { notaParser } from './parser/notaParser';

const lexer = new notaLexer(CharStreams.fromString("+"));
const parser = new notaParser(new CommonTokenStream(lexer));
const root = parser.word();

console.log(root.toInfoString(parser));
    null
word: WORD;
PLUS : '+';
WORD: ~'a';
 类似资料:
  • 我正在努力理解语法文件:https://github.com/antlr/grammars-v4/blob/master/url/url.g4 我无法理解运算符在最后的Character集合中:我知道代表不在集合运算符中,如:https://github.com/antlr/antlr4/blob/master/doc/lexer-rules.md即是匹配任何单个字符不在描述的集合中,但如何解释当

  • 欧几里德的定义是, 给定两个整数a和b,其中≠ 存在唯一的整数q和r,使得a=bq r和0≤ R 根据以下观察,, 看起来运算符正在使用不同的规则运行。 link1没有帮助, link2给出了递归的答案,因为我不理解是如何工作的,所以很难理解是如何工作的 我的问题: 如何理解python中模运算符的行为?我不知道与操作员工作相关的任何其他语言。

  • Rust 有一个叫做 match 的极为强大的控制流运算符,它允许我们将一个值与一系列的模式相比较并根据相匹配的模式执行相应代码。模式可由字面值、变量、通配符和许多其他内容构成;第十八章会涉及到所有不同种类的模式以及它们的作用。match 的力量来源于模式的表现力以及编译器检查,它确保了所有可能的情况都得到处理。 可以把 match 表达式想象成某种硬币分类器:硬币滑入有着不同大小孔洞的轨道,每一

  • 我是一个Antlr4新手,有一个相对简单的语法问题。语法在末尾的底部给出。(这是一个语法片段,用于分析生物序列变体的描述)。 在下面的单元测试中,我试图解析字符串。 这里出了什么问题?我在哪里可以学习如何解决这个问题?

  • 我是ANTLR的新手。我想写一个语法来解析下面的输入: 语法如下:: 当我尝试使用语法解析上述输入时,它会引发以下异常:: 第1行:0不匹配的输入'commit a1b2c3d4',应为'commit' 我已经引用了ANTLR4:不匹配的输入链接,但仍然不清楚发生了什么。