ANTLR4中的令牌处理不一致

ANTLR4书引用了一个多模式示例 与 有没有我不见的安特福?这是在使用antlr4 maven插件 wiki提到了一些类似的内容,但我的阅读方式与github上的示例和使用时的轶事经历相矛盾,出现了以下情况之一: 您忘记在ModeTagsLexer.g4中更新OPEN规则以使用以下表单: OPEN : '«' -> mode(ISLAND) ; 您在Antlr4中发现了一个bug,应该向管理员报告 您是否指定了ANTLR在读取语法时应该使用的文件编码?欧洲字符少于255应该没问题

Antlr4 如何转换递归表达式?

在anltr4 java语法()中,我想知道何时有完整的表达式。在本例中,我尝试进行类似以下的转换: from: String foo = bar + ", " + baz + "; are true"; to: String foo = String.format("{0}, {1}; are true", bar, baz); 问题从语法的声明开始: expression ('+'|'-') expression" 这也是一个表达的孩子。鉴于上述示例,回调将类似于以下内容: 0:

Antlr4 我可以对Lexial元素进行一次检查,而不是对许多解析器规则进行检查吗?

一、 我试图将antlr4与语法一起使用,以实现idl文件应该遵循的一些检查。一条规则是关于名字的。规则如下: ID仅包含字母、数字和符号下划线 我以一封信开头 ID以字母或数字结尾 ID不是艾达、C、C++、java、IDL中的保留字 执行此检查的一种方法是编写一个函数,用于检查这些属性的字符串,并在每个具有ID的规则的出口侦听器中调用它。例如,在exitConst_decl()、exitInit_decl()、exitSimple_declarator()和许多其他位置中(参考IDL.

Antlr4不';t正确识别unicode字符

我有一个非常简单的语法,它试图将“é”与标记E_代码匹配。 我已经使用TestRig工具(带-tokens选项)对其进行了测试,但解析器无法正确匹配它。 我的输入文件是用UTF-8编码的,没有BOM,我使用的是ANTLR版本4.4。 其他人也可以检查一下吗?我在控制台上获得了以下输出: 第1行:0“Ă”处的令牌识别错误 grammar Unicode; stat:EOF; E_CODE: '\u00E9' | 'é'; 我测试了语法: grammar Unicode; stat: E_

Antlr4 ANRLR4词法语义谓词问题

我试图在lexer中使用语义谓词来预测一个标记,但不知何故,我无法正确地得到它。以下是我所拥有的: 词汇语法 lexer grammar TLLexer; DirStart : { getCharPositionInLine() == 0 }? '#dir' ; DirEnd : { getCharPositionInLine() == 0 }? '#end' ; Cont : 'contents' [ \t]* -> mode(CNT)

Antlr4 组合语法中未识别ANTL 4词法规则

因此,我正在使用ANTLRWorks 2.1在ANTLR4中编写一个组合语法。我有lexer规则Identifier和Block,它们没有被识别为已定义的lexer规则,但仅在定义的最后一个解析器规则中。在这些规则之后添加文字将删除(或隐藏)这些错误 我的语法结尾有错误(斜体标记抛出错误): 语法组合; 选项{language=Cpp;} @lexer::命名空间{AntlrTest01} @解析器::命名空间{AntlrTest01} /*第一Lexer级*/ 位:“0”|“1”; 数字:“0

从antlr4语法中消除嵌入式操作

我有一个antlr语法,其中嵌入的操作用于自底向上收集数据并构建聚合数据结构。下面给出了一个简短的版本,其中只打印聚合的数据结构(即在这个简短的示例代码中没有为它们创建类) 由于antlr的目标之一是保持语法文件的可重用性和动作独立性,因此我尝试从该文件中删除动作并将其移动到树漫游器。我第一次尝试使用以下代码: public class Main { public static void main( String[] args) throws Exception { Sampl

ANTLR4歧义-如何解决

我想解决以下歧义: grammar test; WS : (' ' | '\t' | '\n' | '\r' | '\f')+ -> skip; program : input* EOF; input : '%' statement | inputText ; inputText : ~('%')+ ; statement : Identifier '=' DecimalConstant ';'

如何手动重写Antlr4解析树?

我正在开发一个简单的Xquery处理器,并使用Antlr4解析语法。我使用访问者模式遍历解析树。现在,如果查询满足某些条件,我想重写一个查询。如果查询直接使用诸如“join”之类的关键字并符合“join”语法,处理器现在可以处理查询 如果查询可以更改为联接查询,我想首先重写解析树,否则什么也不做。有没有办法手动操作解析树?比如添加一个规则上下文或者构造一个新的解析树 对于Antlr4,惯用的方法是用分析产品装饰树节点,而不是改变树结构。也就是说,可以使用一个或多个树漫游来识别和标记可以合并为联接

由于歧义导致antlr4词法分析器/解析器冲突

我试图解析MS的SQL方言。根据规范,“top”的表达式必须用括号括起来 选择顶部(@rows*2)a、b、c从 但作为例外,如果值是无符号文字整数,则可以忽略这些值,因此 从以下位置选择前75名 我尝试在解析器中嵌入这个文本整数特例(松散地): top_子句:'top'[0-9]+|'top'('expression') 因此,第一种选择是纯词法规则,第二种选择是解析器规则。因为整型常量是一个有效的表达式,所以它选择将其解析为表达式 问题是,1)我可以强制它作为没有谓词的lexer规则进行匹配

为什么ANTLR4需要花费很长时间来为String类构建解析树

我正在尝试使用以下标准ANTLR设置代码块为Java的String类构建解析树。我使用的是antlr4存储库上发布的标准Java8.g4语法(完整代码可在上获得) 输出为: Building the parse tree... Built the parse tree...(took 21 seconds) 我试着跑了好几次,我发现这需要20多秒。 花这么长时间是正常的吗?我的设置是否有问题?有没有办法加快解析树的构建速度 要观察计算机上的问题,请执行以下命令: git clone https

Antlr4 控制前瞻深度或将令牌源与令牌消耗同步

我正在将SystemVerilog语法从ANTLR2.7.7移植到ANTLR4.7 SystemVerilog从Verilog继承了大量指令。它们几乎可以出现在源代码的任何地方。因此,它们不能由 解析器。有些是由lexer解释的,永远不会深入(控制源代码加密),有些是用于预处理器(宏、条件编译等),但也有一些超出了该阶段。这些需要解析器和处理它们的直接令牌源之间的双向通信。当解析器遇到可能受这些指令影响的构造时(当访问者用于操作时,解析器需要请求这些信息以将其作为上下文的一部分记住),解析器会询

用ANTLR4表示规则

我必须定义一个表示以下语句的规则:{x in y | x>0}。 对于理解“x在y中”的第一部分,我有子规则: FIRSTPART: Name "in" Name ,而名称可以是一切 我的问题是我不想有贪婪的行为。因此,它应该解析到“|”符号,然后停止。由于我是ANTLR4的新手,我不知道如何实现这一点 请注意,通常,lexer/parser规则应该表示源输入流的允许语法 源如何匹配任何规则或子规则的评估(以及结果)是一个语义问题——输入是否匹配特定子规则,以及这是否应该控制规则的最终评估方式

Antlr4 为什么;“点”;规则匹配多个数字?

我尝试用ANTLR4编写我的第一个解析器。我在一个已经更大的grammerfile中使用的规则之一应该是匹配2个数字作为2D点。下面是语法的简化示例: grammar example; WS: [ \t\r\n]+ -> channel(HIDDEN); INT: [0-9]+; FLOAT: [0-9]*'.'?[0-9]+ ; IDSTRING: [a-zA-Z_] [a-zA-Z0-9_]*; NUMBER: (INT | FLOAT) ; id: IDSTRING; num:

Antlr4 ANTLR语法:布尔文字,可以作为限定变量名出现,而忽略空白

我正在使用ANTLR在Java中创建一个解释器。我有一个语法,我已经使用了很长时间,我已经围绕这个语法生成的类构建了很多代码 语法中的“false”定义为文字,变量名也有定义,允许从数字、数字、下划线和点构建变量名(见下面的定义) 问题是-当我使用'false'作为变量名时。 varName.nestedVar.false。将false标记为false文本的规则优先 我试着用我在互联网上找到的所有东西玩空白。当我删除空白:[\t\r\n]->通道(隐藏)时的解决方案和在每个规则中使用显式WS*或

ANTLR4 ATN中原子跃迁、集合跃迁和ε跃迁之间的区别是什么?

ANTLR4 ATN中原子跃迁、集合跃迁和ε跃迁之间的区别是什么?在网上找不到任何定义。你找不到任何定义,因为这是大多数人都不感兴趣的内部细节 不同的转换类型主要用于指示ATN行走算法处理它们时要匹配的条件。其中有10个: ε:一种无条件且不消耗输入的转换。步行者只是跳过了他们。 范围:可能是集合转换的旧版本,不用于ANTLR4。唯一的区别是,Range采用要匹配的范围的起始值和结束值,而Set采用间隔集。 规则:解析器ATN中的ε转换为子规则。不消耗任何东西。 谓词:以附加谓词作为条件的ε转换

ANTLR4:输入不匹配

我想匹配表单的输入:: commit a1b2c3 Author: Michael <michael@test.com> commit d3g4 Author: David <david@test.com> 提交a1b2c3 作者:迈克尔 提交d3g4 作者:大卫 以下是我写的语法: grammar commit; file : commitinfo+; commitinfo : commitdesc authordesc; commitdesc : 'com

Antlr4 为什么将令牌分配给通道时出错?

我的.g4文件中有以下代码 @lexer::members{ public static final int WHITESPACE = 1; public static final int COMMENTS = 2; } WS : (' '|'\t'|'\f')+ -> channel(WHITESPACE) ; COMMENT : '//' ~('\n'|'\r')* -> channel(COMMENTS) ; LINE_COMMENT

如何在ANTLR4中终止Lexer

有没有一种简单的方法来终止lexer 有些代币我还不想处理。但是,如果输入中确实包含这些令牌,我还希望Lexer发出警报。我的简单策略是在操作中抛出RuntimeException: CHARIZING: '#@' {throw new RuntimeException("charizing op not supported yet");}; 但是该操作会产生编译错误,因为生成的Lexer在该操作之后有一个break命令,Java编译器会抱怨break是一个无法访问的语句 CPPDefine

Antlr4 ANTLR 4 Lexer规则:如何忽略零件?

以下是先前ANTLR版本的相关主题: 使用lexer规则,如: R1 : [a-zA-Z0-9]* ';' ; 例如,我有以下输入文本: test;rezrezr zrezrzerz 它将匹配测试;这是正确的。我只需要测试字符串 我需要照顾'吗例如,在自定义侦听器中手动输入字符?或者有没有一种方法可以在语法中指定我只想使用lexer规则来避免它 更新 如果你想避免这种情况;字符,只需将其从lexer规则中删除即可。注意,我还将*改为a+,以确保R1永远不是零长度令牌 R1 : [a-zA

Antlr4 在ANTLR v4中构建自定义解析树

问:在Antlrv4中,有没有一种(更直接的)在解析时构建自定义解析树的方法 我想我们可以遍历并重写自动构建的树,但我想知道我们是否仍然可以在解析时手动构建树(或者调整树)(类似于ANTLR v3和ealier)。这个想法是,根据编写语法的方式,我们在ANTLR构建的树中得到了很多无用的节点,虽然我知道您只能覆盖您感兴趣的侦听器方法,但仍然需要检查和跳过无用的令牌类型,等等。否,我们对Antlr3的经验是,手动AST特性不可避免地导致代码更难维护和理解,从而导致开发人员在对语法进行任何更改时出现

Antlr4 ANTLR 4如何解析注释

我正在解析一种类似SQL的语言,解析注释时遇到问题。 我们的想法是忽略它们 我有以下规则: NEWLINE: '\r'? '\n' -> skip WS : [ \t]+ -> skip 我怎么能忽略: 介于“--”或“#”和下一个“\n”之间的所有内容 “/”和“/”之间的所有内容(斜杠+星号直到星号+斜杠-星号不知怎么消失) 在WS和NEWLINW之前,我尝试过类似的方法: COMMENT1 : ('--'|'#') ~'\n'* -> skip; 没有

将AST动作翻译重写为ANTLR4

我有一个用antlr2语法编写的语法文件,需要帮助理解如何用antlr4语法重写一些解析器规则。我知道antlr4消除了构建AST的需要,因此我不确定如何处理AST操作翻译的规则。解释了一些语法以及如何使用#构造,但我仍然不确定如何阅读这些规则并重新编写它们 temp_root : temp { #temp_root = #([ROOT, "root"], #temp_root); } EOF; temp : c:temp_content { #temp

使用PDDL语言的默认ANTLR4语法分析错误

我对ANTLR比较陌生,所以请容忍我 我试图解析一个有效的PDDL文件,但它似乎有某种我找不到的错误 line 3:13 mismatched input 'at' expecting NAME line 8:18 mismatched input 'at' expecting NAME line 8:25 mismatched input '?a' expecting {'(', NAME, NUMBER} 再现错误的最小输入: (define (domain foo) (:types ca

Antlr4 ANTLR似乎混淆了规则

要复制的最小语法: grammar GeneralSearchQuery; id : ID; ID : ('A'[A-Z0-9]+); anystring: ANYSTRING; ANYSTRING: ~[ \t\r\n"\\'():^]+; 问题在于“anystring”规则。如果我删除任何id/id规则,那么奇怪的解析就会消失 其目的是匹配除某些有意义的字符外的任何字符(unicode、非unicode) 据我所知,它是这样分解的: ~ Negate the follow

ANTLR4空格问题,将数字与字母分开

我有一个语法,它应该区分ID、INT和IP地址。我的语法有更多的模式需要识别,但我正在努力解决的是像“123abc”这样的标记 通常语法会定义WS:[\t\r\n]+->skip;它会忽略空格,所以在我的语法输入中,像'123abc'会变成'123'和'abc'。这是lexer的正确行为。但是,我希望在这种情况下解析失败 我在SO和其他一些网站上也看到过类似的问题。我提出了一个可行的解决方案(如下),但在我看来,应该有更好的办法。我想知道是否有人能提出这样的建议 以下是我的(简化)工作语法: g

为什么结尾括号在我的antlr4语法中无效?

我正在用ANTLR4编写一个DSL,现在我有一个右括号结尾的问题。为什么这个命令无效 这是命令: set(buffer,variableX|"foo"); 包含错误的解析树 这是我的语法 grammar Expr; prog: expr+ EOF; expr: statement #StatementExpr

ANTLR4中的标记类型和词汇是什么?

我在网上找不到任何能很好地描述这一点的好资源。“令牌类型”是指我们在编程语言中遇到的类型,如int、string、char等吗。?我知道它是一个整数,但这个整数是什么意思?什么是词汇表?寻找一些简单的最低语法解释。标记类型和词汇的概念非常简单,可能没有人想过正式描述它们。但这是: 在词法转换过程中,词法转换程序将数字分配给部分输入文本。这意味着在输入中的特定模式和任意数字之间创建映射。此号码称为令牌类型 语法中的lexer规则描述必须匹配的模式,lexer规则名称是根据匹配的输入创建的令牌的文本

调试ANTLR4语法

我是ANTLR的n00b,通过尝试在ANTLR4中运行ASN.1解析器,我变得越来越强大。我目前正处于将输入文件传递给grun的阶段,并看到类似“第1行:12029输入时没有可行的替代方案…”这样的错误 我试图将这与我的规则中的一些问题联系起来,但是通过字符计数定位有问题的输入是一个挑战。ANTLR解析器将输入视为一行是正常的,还是因为规则问题(我在OSX系统上)而无法识别EOL?如果将输入视为一个长行是正常的,有人能推荐一种工具来定位文件中给定的字符位置吗?您的代码是否只使用\r行结尾?ANT

ANTLR4将ParserRunContext树展平为数组

如何将带有子树的ParserRuleContext展平为令牌数组?ParserRuleContext.getTokens(intttype)看起来不错。但是什么是t类型?是令牌类型吗?如果要包括所有令牌类型,使用什么值?parseruleContext.getTokens(int ttype)仅检索父节点的某些子节点:它不会递归进入父树 然而,写下自己的话很容易: /** *按顺序从{@code tree}中检索所有标记。 * *@param树 *要从中获取所有令牌的解析tee。 * *@按顺序

用于解析Java8文件的Antlr4Java7语法

是否有任何方法可以使用Antlr4Java7语法来解析java8文件,而无需对java.g4语法文件进行太多更改。据我所知,从java7到java8的语法变化是lambda表达式语法和双列运算符。我能够合并lambda表达式,但在当前语法文件中包含双列运算符似乎有点复杂 您是否尝试过ANTLR repo中的Java8语法:?是的。但我不能简单地从Java7迁移到Java8。我已经编写了一套API,它依赖于Java7语法的规则名称。我一直在寻找的是将Java8新引入的语法元素合并到我现有的Java

Antlr4 令牌文本信息

我试图获取关于标记文本位置的信息:开始/结束行和列 好的,使用令牌API中的getCharPositionInLine和getLine,我可以得到一些我需要的东西。这有助于我获取结束信息。但是,令牌流中的最后一个令牌呢?如何获取最后一个令牌的最后一列和最后一行 也许在课文中计算换行,但我不喜欢 提前感谢。令牌流中的最后一个令牌是长度为0的EOF令牌。该标记的行和列是流中最后一个真实标记的结束行和列。我猜是这样的。非常感谢。

ANTLR4 Lexer操作调用getText()时的结果不正确

lexer操作中的getText()似乎无法检索正确匹配的令牌。这是正常的行为吗?例如,我的部分语法中有以下规则 解析支持U-Unode的C++样式标识符,将Unicode字符嵌入标识符名称的一部分: grammar CPPDefine; cppCompilationUnit: (id_token|ALL_OTHER_SYMBOL)+ EOF; id_token:IDENTIFIER //{System.out.println($text);} ; CRLF: '\r'? '\n' ->

ANTLR4:获取每个规则的开始和结束索引:$stop行为奇怪

我需要得到每个规则的开始和结束索引。即,开始索引是属于规则的第一个令牌的第一个字符的字符位置,结束索引是属于规则的最后一个令牌的最后一个字符位置。有了这些数字,我可以精确地从输入文件中裁剪出规则的结果 这样做的直接方法应该是使用$start和$stop标记,即$start.getStartIndex()和$stop.getStopIndex()。但是,我遇到了$stop标记经常是null,即使在@after操作中使用 根据确定的Antlr4参考,$stop标记定义为:“要匹配的最后一个非隐藏通道

如何使Antlr4在规则完成时停止解析

我必须解析文件中有表达式的部分,如: garbage garbage garbage BEGIN <something> END garbage garbage... 它正确地解析了我的表达式,如果它是我文件中唯一的东西的话。遗憾的是,当我在文件中遇到BEGIN时尝试踢解析器时,解析器将正确地解析表达式,但随后将尝试在结束后获取其他标记 我已经阅读了ANTLR4书中的abiut Fyzy语法部分,但这不是我想要的,因为解析的结果基本上会影响文件的其余部分,解析的结果将产生一组替换,

Antlr4 Can';我搞不懂语法调整

我正试图为现有的DSL构建v4语法,但我有点不知所措。我想尽一切办法都试过了,但运气不好。我们可以有一个函数调用,比如foo(param1,param2),我一直在工作。有一个可选的构造,比如foo(y,z)x100这意味着要调用fx 100次(x是文字标记,很好的选择,嗯!)这是我无法实现的 我的func_调用现在看起来像这样:func_调用:标识符'('arg_list') 添加(('x'|'x')expr)及其变体无效。它开始被名为x的变量所迷惑 如果有帮助的话,这种语言的旧yacc语法有

Antlr4中的条件词法规则

鉴于这种语法: grammar ColonTest; main : statement* EOF; statement : NUM_LITERAL expression SEMICOLON; expression : primary (MULT_OP primary)*; primary : WORD+; NUM_LITERAL : [0-9]+; SEMICOLON : ';'; MULT_OP : '*' | '/'; // | ':'; WORD

Antlr4 使用一个备选方案获取令牌的名称

现在,如果标记只包含一个替代项,则ANTLR不会返回Lexer标记名,例如,对于标记SUZY:'SUZY''Suzy'将在解析树中进行编码 现在,我使用标记名来编码一些有用的信息,例如,SUZY_GENDER_femal:'SUZY' 到目前为止,我已经找到了两种解决方案来获取令牌名称,即使令牌只包含一个备选方案: 在标记中重复相同的选项:SUZY_GENDER_femal:'SUZY'|'SUZY' 使用fragment关键字: 这两种解决方案都有效,但并不理想。我正在研究ANTLR实现,以一

Antlr4 克服词汇歧义

于20年10月25日更新 我有一种面向记录的文件格式,其中('\r'?'\n'|'\r')[即换行符]可以是字符序列的终止,也可以是两个记录之间的分隔符。每个记录中都有自由文本 我面临的两个问题是: 如果我在文本定义中包含数字和标点符号,则时间戳将停止识别 我想处理分隔两条记录的换行符,它与换行符终止换行符不同 我想分析这个简单的文件格式: 1 00:00:01,123 --> 00:00:10,000 First caption is here Second caption is here

为什么getChild方法在ANTLR4中返回ParseTree而不是ParseRuleContext?

我想在解析树中插入新节点,我的解析器在访问该树时刚刚得到该节点。该位置可能是当前节点的父节点或同级节点,或者就在它之前,因此我需要通过调用ParseRuleContext中的getParent和getChild方法来检查是否存在与新节点的规则名称匹配的节点getParent返回ParseRuleContext,但getChild返回ParseTree。为什么这两个方法返回不同的类型 顺便说一句,当前节点也可能被新节点替换 在解析树上实现这种修改的最佳方法是什么?谢谢 ANTLR 4中的解析树由终

Antlr4 为什么pushMode需要消耗输入?

我有下面的antlr4 lexer语法,目标是在字符串不以“-”开头的情况下从字符串生成一个标记字符串_模式 我正在使用来实现一个前瞻性测试 因为我想为字符串的lexer本身添加更多的代码,并且想添加其他前缀,而不仅仅是应用不同规则的“-”,所以我想立即推一个模式并继续那里的lexer lexer grammar StrStrLexer; @members { public boolean testAssertion(int assertionMode, int passingRule)

ANTLR4推送模式,popMode,模式

我的语法在使用“pushMode”和“popMode”时失败,但在使用“mode”时有效 此语法结构有效: TAG: '{' -> pushMode( TAG_MODE ), skip; TEXT: ~[{]+; mode TAG_MODE; TAG_COMMENT: '*' -> skip, mode( COMMENT_MODE ); mode COMMENT_MODE;

Antlr4 如何从子规则上下文ANTLR 4获取令牌?

这是我的图像结构ANTLR 4解析树gui: 这是我的侦听器规则声明: public void enterDeclaration(ADTCParser.DeclarationContext ctx) { TokenStream tokens = parser.getTokenStream(); String initDeclarationList = tokens.getText(ctx.initDeclarationList()); } 要从initDecl

Antlr4 区分文字\n与嵌入换行符

我正在用antlr编写的模型验证Rust解析器的手写内容。我遇到了antlr转义字符串的问题: [15:48:50]~/src/rust2/src/grammar> grun RustLexer tokens -tokens "\n" [@0,0:3='"\n"',<46>,1:0] [15:48:50]~/src/ru

Antlr4 Visual Studio 2015 C#ANTLR

为了让我的雇主相信ANTLR和StringTemplate的好处,我首先用Java构建了一个小演示。但是Java不是我们喜欢的语言之一,所以我把它翻译成了C。使用VS2015(社区版)和网上的各种说明,我只得到了目前为止。我现在明白了 自版本4.3起,ANTLR无法生成“org.ANTLR.v4.codegen.CSharp\u v4\u 5\u 2Target”代码 不兼容的版本?哪些版本的库与成功构建兼容。我不知道如何使用GitHub。似乎没有可下载的软件包,我也看不到如何下载一组要编译的文

ANTLR4规则优先级

我正在尝试使用ANTLR4获得一个简单的语法。基本上是由分隔的关键字列表可以使用Not进行否定。例如,类似这样的事情: Not negative keyword;positive 我写了以下语法: grammar input; input : clauses; keyword : NOT? WORD; clauses : keyword (SEPARATOR clauses)?; fragment N

我可以让我的ANTLR4 Lexer从输入流中丢弃一个字符吗?

我正在解析PDF流。在关于文字字符串对象的第7.3.4.2节中,说明应忽略文字字符串中未后跟行尾字符、一到三个八进制数字或其中一个字符“nrtbf()\”的反斜杠。有没有办法让我的lexer中的recover方法在这种情况下忽略反斜杠 以下是我的简化解析器: parser grammar PdfStreamParser; options { tokenVocab=PdfSteamLexer; } array: LBRACKET object* RBRACKET ; dictionary:

Antlr4匹配部队优先级

我有一个查询语法,我正在工作,并发现了一个案件,是证明难以解决。下面提供了复制语法的最低版本 grammar scratch; query : command* ; // input rule RANGE: '..'; NUMBER: ([0-9]+ | (([0-9]+)? '.' [0-9]+)); STRING: ~([ \t\r\n] | '(' | ')' | ':' | '|' | ',' | '.' )+ ; WS: [ \t\r\n]+ -> skip ; comma

antlr4:令牌未被识别为预期的

我正在尝试使用antlr4构建一个语法,它应该能够将中间解析结果存储为变量,以便以后使用。我考虑使用一个关键字,比如as(或者德语als),它将触发此存储功能。除此之外,我还有一个通用令牌ID,它将匹配任何可能的标识符。 存储能力应该是用户的选择。因此,我使用的是?在我的语法定义中 我的语法如下: grammar TokenTest; @header { package some.package.declaration; } AS : 'als' ; VALUE_ASSIGNMENT : A

  1    2   3   4   5   6  ... 下一页 最后一页 共 11 页