如何在ANTLR中构造干净的、类似Python的语法?

再见 如何构造一个简单的ANTLR语法来处理多行表达式,而不需要分号或反斜杠 我正在尝试为表达式编写一个简单的DSL: # sh style comments ThisValue = 1 ThatValue = ThisValue * 2 ThisOtherValue = (1 + 2 + ThisValue * ThatValue) YetAnotherValue = MAX(ThisOtherValue, ThatValue) 总的来说,我希望我的应用程序为脚本提供一些初始命名值,并提取最

ANTLR递归模糊问题

在上述场景中,“或”可以通过 表达式->二进制操作 或 EXPRESSION->UNARYOP->EXPRESSION->BINARYOP 有没有一种系统的方法来消除上述歧义?我认为消除语法中的歧义是一项无法自动解决的任务,因为如果选择哪一个选项是正确的,那就是一种“主观”选择 确定问题后,构建不同的替代树并添加新的生成规则以禁止无效的解析树 恐怕没有像删除左递归这样神奇的解决方案。。。也许我错了 在您的情况下,您可以定义 VARIABLE: ... UNARYOP: 'not' Expres

用Antlr解析歧义输入

几天来,我一直在尝试解析一些由文本和数字组成的文本(我在语法中称之为句子) 我有一个规则,需要解析以INT结尾的句子 sentence_with_int : sentence INT; 所以,如果我有一些输入是“购买的14码鞋的数量是3”,那么句子_和_int将是匹配的,而不仅仅是句子。我相信有更好的方法可以做到这一点,但我只是在学习这个工具 谢谢你,Richard你的语法: 确实如此。这里有一个小测试线束: import org.antlr.runtime.*;

在ANTLR中提取递归

我有一个ANTLR语法,不明白它是如何递归的。有没有办法让ANTLR显示它用来查看我的规则是递归的派生 整个递归语法: grammar DeadMG; options { language = C; } ID : ('a'..'z'|'A'..'Z'|'_') ('a'..'z'|'A'..'Z'|'0'..'9'|'_')* ; INT : '0'..'9'+ ; FLOAT : ('0'..'9')+ '.' ('0'..'9')* EX

ANTLR3的错误处理问题

我尝试了以下方式报告错误 @members{ public String getErrorMessage(RecognitionException e,String[] tokenNames) { List stack=getRuleInvocationStack(e,this.getClass().getName()); String msg=null; if(e instanceof NoViableAltException){

与程序ANTLR一起构建C运行时

我想用antlr(目标C语言)编写一个程序,并将库(C运行时发行版)发送到包中,这样它就可以在其他机器上使用,而无需在该机器上安装antlr。我已在此链接上下载了此运行时的最新版本。谁能告诉我我能不能做到?干杯。我没有使用C目标,但使用了C目标。我想他们的工作方式也差不多 您需要将C运行时库与程序一起部署,因为生成的解析器和lexer将使用该库中的函数 您不需要安装Antlr本身,例如AntlrWorks或任何.jar文件是的,您可以静态链接它,但如何安装取决于您的平台。对于带有gcc或llvm

ANTLR中语法的简单编程生成和编译?

我希望以编程的方式将语法转换为字符串形式,并为其生成一个或多个字符串形式的Java。我想在内存中完成这一切,不涉及任何文件。我查看了org.antlr.Tool源代码,但我希望有更简单的方法来做我想要的事情,而不是重写没有文件的工具。有什么东西已经存在了吗 有什么东西已经存在了吗 不,一点也不。不在ANTLR的公共API中,也不在一些现有的第三方工具中

Antlr 在范围和语法错误中使用浮动?

我正在尝试使用ANTLR将LALR语法转换为LL,但遇到了一些问题。到目前为止,我认为将表达式转换为自上而下的方法对我来说是很简单的。问题是当我将范围(1..10)和(1.0..10.0)包含在浮动中时 我试着使用这里找到的答案,但不知何故,我的代码甚至不能正确运行,更不用说解决一系列的浮点,即(float..float)。 附件是我的语法样本,只关注这个问题 grammar Test; options { language = Java; output = AST; } pars

在ANTLR中捕获格式化变量声明

我有一个简单的lexer/语法,我一直在研究,我很难理解匹配格式化变量的标准操作过程。我正在尝试匹配以下内容: 变量名至少可包含1个字符。如果是一个字符,则必须是大写或小写字母 如果大于1个字符,则必须以任意大小写的字母开头,然后后跟任意数量的字符,包括数字、下划线和美元符号 我已经用多种方式重写了几次,但总是出现以下错误: 决策可以使用多个选项匹配输入,例如“单字母”:1、2 因此,该输入禁用了备选方案2“ 我理解我的语法有一些歧义,但我有点困惑,为什么一旦我们进入最初的匹配循环,就可以匹配多

Antlr xtext如何容忍解析错误?

我正在编写一种类似SQL的语言。假设正确的语法是 USE foo; SELECT * FROM bar; 但是我把它打到 US foo; SELECT * FROM bar; 默认行为是Antlr将停止解析,并且我丢失了语法高亮显示和大纲视图。 错误消息是“US”处缺少EOF。我将IParser重新绑定到RuntimeModule中的自定义解析器 @Override public Class<? extends org.eclipse.xtext.parser.IParser>

ANTLR中的语法和所选单词

编辑:我更改了示例,以便更好地解释我想要得到的东西。 这是我的语法: INTEGER : ' int '; LET : [a-z] ; cchar : LET | '-' | ' ' ; wor : cchar+; aaa : wor+ | wor* INTEGER wor* ; aaa是根。并写下“xx int xx int”。 我想得到一个结果:“x x int x x I n t”。只应捕获第一个int,下一个int不应给出“无关输入”错误,而应拆分为字母 如何修复它?这似乎可以按

ANTLR 4树注入/重写运算符

在ANTLR 3中,您可以执行以下操作: andExpression : (andnotExpression -> andnotExpression) (AND? a=andnotExpression -> ^(AndNode $andExpression $a))* ; 你知道如何在新版本中实现吗?ANTLR 4没有像ANTLR 3那样的重写操作符或output=AST选项。ANTLR 4解析器生成的树是解析树,其形状由语法规则隐式定义

Antlr 有可能不允许自递归吗?

我有规则: expression : //... | expression (relative_operator expression)+ | //... ; 理想情况下,当我输入1=1=1时,它将生成表达式(1,=,1,=,1)树。然而,实际上它会生成表达式(1,=,表达式(1,=,1))。这是因为它更喜欢递归解析,而不是一行解析。是否可以明确地告诉规则它不能在自身上递归,或者在尝试在自身上递归之前,它应该遵循+/* 可以显式地告诉规则它不能在自身上递归,或者在尝试在

有没有办法编辑Antlr ParseTree上的节点?

我递归地遍历antlr解析树,我想编辑树中TerminalNodes的文本。我希望能够为任何ParseTree做到这一点,并且我不希望为可能遇到的每个ParseTree编写特定的访问者 我查看了权威的ANTLR4参考,发现antlr对树重写没有任何直接支持。我正在寻找任何可能的解决办法或替代方案 private void editTree(ParseTree tree){ for(int i = 0; i < tree.getChildCount();i++){

使用c+中的访问者模式访问antlr4可选终端+;

我有下面的一段语法 prod:(ID在中)?子规则(逗号(ID中)?子规则)* ID、IN和COMMA是标记终端,prod规则生成一个子规则表达式列表 我用C++运行时使用访问者模式,现在我遇到了以下问题。 如何找出ID令牌属于哪个子规则?调用ID()方法允许我请求特定的第k个ID令牌,但它不必对应于第k个子规则。我想澄清这一点。下面是一个令牌流示例 subrule COMMA subrule COMMA ID IN subrule COMMA 如果我在子规则向量上迭代,没有对应的并行ID迭

ANTLR D目标-有成熟的实现吗?

是否存在成熟的ANTLR D靶点(或至少未被归类为α靶点)?也许有一些现有sourceforge托管目标的良好工作示例在使用中 是否存在成熟的ANTLR D靶点(或至少未被归类为α靶点) 假设你的意思是被归类为阿尔法,那么不,没有。至少,据我所知不是这样,我一直密切关注着ANTLR邮件列表。现在被归类为Beta版。 这里也有一个例子

Antlr 如何解析带括号的层次结构根?

我正在尝试用ANTLR解析值。以下是我语法的相关部分: root : IDENTIFIER | SELF | literal | constructor | call | indexer; hierarchy : root (SUB^ (IDENTIFIER | call | indexer))*; factor : hierarchy ((MULT^ | DIV^ | MODULO^) hierarchy)*; sum : factor ((PLUS^ | MINUS^) factor

Antlr 如何在没有回溯的情况下同时进行函数调用和插入式分组

有没有办法指定允许以下语法的语法: f(x)(g, (1-(-2))*3, 1+2*3)[0] 转换为(在伪lisp中显示顺序): 以及有限运算符优先级等 以下语法适用于backtrack=true,但我希望避免这种情况: grammar T; options { output=AST; backtrack=true; memoize=true; } tokens { CALL; INDEX; LOOKUP; } prog: (expr '\n')* ; expr

Antlr 如何在PHP解析器中处理赋值运算符的优先级?

我在Antlr3.4中编写了一个PHP5解析器,它几乎已经准备就绪,但我无法处理PHP的一个棘手特性。我的问题是赋值运算符的优先级。在PHP手册中,赋值的优先级几乎位于列表的末尾。列表中只有and、xor或and在后面 但手册页面上有一条说明: 尽管=的优先级低于大多数其他运算符,但PHP将 仍然允许类似以下表达式:if$a=foo,in 在这种情况下,foo的返回值被转换为$a 注释中的小示例对我的解析器来说不是问题,我可以在assignment规则中将其作为特例处理 但还有更复杂的代码,例如

为什么我的ANTLR语法不匹配?

我的语法如下: grammar BirdGrammar; lines: (init '\n')*; init : lineCode | continuation; sep : ' ' | '-' ; lineCode : interfaceList | protocolList | interfaceAddress | interfaceFlags ; interfaceL

Antlr 在不使用令牌的情况下使用孤岛语法返回默认模式

我仍在尝试使用ANTLR解析一个简单的Javadoc样式的格式。基本上,格式如下所示: /** * Description * * @name someId */ 我的语法分析器如下: query_doc : BEGIN_QDOC description name NOMANSLAND* END_QDOC; description : (DESCRIPTION_TEXT | NOMANSLAND)*; name : OPEN_N

Antlr 4错误恢复

我的脚本语言包含一系列宏,规则定义如下 program : macrodeclaration* EOF ; macrodeclaration : (STATIC)? 'MACRO' STRING declareparameter statement* 'ENDMACRO' ; 有时我将endmacro错误地键入为endmacros,解析器会吞噬标记“endmacros”,忽略下一个宏定义,继续搜索下一个endmacros。它吐出了那么多不可行的替代错误 我想知道如何调

ANTLR决策可以匹配输入,例如;ID";使用多种备选方案

我对这个解析器的消歧有问题。我想提一下 我正在使用antlrworks 1.4.3(我必须使用它,家庭作业)。我也不能使用backtrack=true 它应该匹配输入,比如 main Int a, Char b, MyClass c -> Int : expr ';' . . . expr ';' end';' 我还在“:”之后找到了解析器,因为这个问题不允许我生成代码 program : classDef+ -> ^(PROGRAM cl

ANTLR:不需要令牌

我的语法如下: query : IDENT 'x' NOT ; WS : (' '| '\t'| EOL)+ { $channel=HIDDEN; }; NOT : ('N'|'n')('O'|'o')('T'|'t'); fragment EOL : '\n' | '\r'; fragment DIGIT : '0'..'9'; fragment LETTER : ('a'..'z' | 'A'..'Z' | '_') ; IDENT : LETTER ( LETTER

antlr工具建议

我正在尝试使用Antlr4.5为SQL语法生成一个lexer/解析器(在C#中)。为了编写语法和测试语法,你会推荐什么样的工具 我正在尝试antlrworks2,但我发现它有点混乱(找不到输入示例文本并查看解析树的方法-不确定它是否不在那里,或者我是瞎子,或者干脆是哑巴,但我非常确定antlrworks v1有这样一个功能) Sam Harwell的Visual Studio VSIX插件看起来很棒,但它也让我感到困惑,词法分析器和解析器是在obj\文件夹中生成的,而不是在项目中生成的。此外,在

如何使用ANTLR v4进行语法突出显示?

我已经为DSL构建了一个语法,我想用一些颜色显示一些元素(表名)。我从Java输出HTML columnIdentifier : columnName=Identifier | tableName=Identifier '.' columnName=Identifier ; Identifier : Letter LetterOrDigit* ; fragment Letter : [a-zA-Z_]; fragment LetterOrDigit : [a-zA-

lexer规则中的ANTLR语义谓词

我在lexer中有如下注释规则 星形斜杠:'/*' 多元素:STARSLASH(选项{greedy=false;}:)'*/' SINGLELINECOMMENT:'/'~('\n')* 现在我必须编写另一个lexer规则,它以“/”开头,以“/”结尾。当我按照下面的方式写这个规则时,我得到了一个错误 斜杠规则:'/'(选项{greedy=false;}:.)*'/' 我使用的是ANTLR3.2。如何编写此规则斜杠规则?多元素:'/*'(选项{贪婪=错误;}:)'*/';在发布问题时,我给出了“

Antlr Xtext:将快速修复重写为引用

我试图检测赋值的右侧是否是一个可能的十六进制值,而不是另一个变量引用。比如说 myvariable = 2 a = 4 /* the c reference does not exist therefore the user may mean hex C add in a quickfix to change to 0xc */ b = c /* The user most probably means a hex number therefore add in a quickfix for

Antlr箭头语法

我在Antlr中发现了以下语法: ->语法的作用是什么 它叫什么,我可以用谷歌搜索它来阅读它 “Antlr4最终指南”只有一页关于它的内容。它指的是“lexer命令”,但它从未命名运算符。本书中的用法与bash解析器中的用法不同。在ANTLR3中,->用于解析器规则,表示a,ANTLR4中不再支持该用法 在ANTLR4中,->用于lexer规则,与旧的v3功能无关。第281页的“ANTLR4最终指南”将其称为lexer命令的一部分。请在你的答复中说明这一点。 file_descriptor

用ANTLR解析字母范围

我有以下解析器规则: defDirective : defType whiteSpace letterSpec (whiteSpace? COMMA whiteSpace? letterSpec)*; defType : DEFBOOL | DEFBYTE | DEFINT | DEFLNG | DEFLNGLNG | DEFLNGPTR | DEFCUR | DEFSNG | DEFDBL | DEFDATE | DEFSTR | DEFOBJ

Antlr 在AntlWorks中忽略空白

我有以下ANTLR语法: grammar mygrammar; ASSIGNMENT : ID '=' INT ; ID : ('a'..'z'|'A'..'Z'|'_') ('a'..'z'|'A'..'Z'|'0'..'9'|'_')* ; INT : '0'..'9'+ ; WS : ( ' ' | '\t' | '\r' | '\n' ) {$channel=HI

ANTLR语法和语法谓词中的左值意识

我正在用ANTLR for D实现一个解析器。这种语言基于C语言,因此声明和表达式之间存在一些歧义。考虑这一点: a* b = c; // This is a declaration of the variable d with a pointer-to-a type. c = a * b; // as an expression is a multiplication. 由于第二个示例只能出现在赋值表达式的右侧,因此我尝试使用以下代码段解决此问题: expression : left =

Antlr错误';在character'上没有可行的替代方案;

我正在使用可用的Objective C语法,并尝试解析以下代码: int main() { int k=0; } 这是一个目标c代码,应该对其进行解析,但是当我调用函数translation_单元时,它给了我以下错误。 错误包括: line 1:0 no viable alternative at character 'main' line 1:0 no viable alternative at character '(' line 1:0 no viable alternat

Antlr 如何更改表达式以强制调用生成的解析器中的RewriteRuleSubtreeStream.NextTree()?

我是一个ANTLR新手,正在尝试将早期的ANTLR 3.1语法更新为3.4。我遇到的一个绊脚石是我生成的解析器。有一行代码调用NextNode(),我希望它调用NextTree(),这样我的解析器就会执行所需的行为 我所讨论的ANTLR表达式是: cast : ('(' ssisType (',' INT)* ')') term -> ^(CAST ^( ssisType INT*) term) ; SSIS类型定义为: ssisType : ( typeCode =

ANTLR 4树注入/重写运算符

在ANTLR 3中,您可以执行以下操作: andExpression : (andnotExpression -> andnotExpression) (AND? a=andnotExpression -> ^(AndNode $andExpression $a))* ; 你知道如何在新版本中实现吗?ANTLR 4没有像ANTLR 3那样的重写操作符或output=AST选项。ANTLR 4解析器生成的树是解析树,其形状由语法规则隐式定义

ANTLR是否有unicode标识符开始和标识符继续字符集的内置规则?

我正在尝试为unicode兼容的标识符编写ANTLR 4令牌规则。在我看来,java.lang.Character中有标识符开始字符和标识符继续字符的概念;是否有与这些概念相对应的内置ANTLR 4字符类?我已为“isUnicode身份识别器开始”的源代码添加了灰色,但未成功。否,ANTLR 4集合文字不支持正则表达式之类的字符类。否,ANTLR 4集合文字不支持正则表达式之类的字符类。嗯。。。我想我问的是一个稍微不同的问题,但你可能已经回答了。我不是在寻找正则表达式本身,只是在寻找一个内置常量

是否有bison yacc到ANTLR的转换器可用

我有一个yacc语法,我想转换成ANTLR。有野牛去吗 ANTLR转换器可用吗?有人能帮忙吗 谢谢, Prasanth让我们比较一下这些解析器生成器: ANTLR v4是一个ALL(*)解析器生成器,是 Yacc是一个解析器生成器 Bison是一个语法分析器生成器 LL和LALR是: LALR(k)语法分析器与LL(k)语法分析器是不可比拟的:对于大于0的任何j和k,存在不是LL(k)语法的LALR(j)语法,反之亦然。事实上,对于任何k>0,给定的LL(1)语法是否为LALR(k)是不可判

ANTLR测试类未编译?

我拼凑了一些代码来测试lexer/parser语法,但我一直在研究如何创建适当的文件输入/流对象来解析文件。我的代码如下所示,我得到了一个关于给BasicLexer类构造函数一个AntlInputStream而不是CharStream的错误,以及一个与给BasicParser一个CommonTokenStream类似的消息(它需要TokenStream)。你知道我哪里出错了吗 public static void main(String[] args) throws Exception {

ANTLR 3:将值传递给Lexer(C目标)

是否有一种机制将值传递给lexer?(我正在与ANTLR 3中的C target合作) 其他一些搜索结果建议将函数和var放入成员区域: @members { bool read_flag; void set_flag(bool b) {read_flag = b;} } 然而,这似乎不起作用。set_flag()是lexer的全局函数,但不能从外部调用 我希望能够在调用代码中执行以下操作: //some input stream pANTLR3_INPUT_STREAM in

Antlr 在分析过程中检测分析错误

如何检测解析器以编程方式生成的错误?例如,根据以下语法: s : 'hello' ; 这个程序输入:“foo-bar” 解析器将打印出“第1:0行不匹配的输入'foo'应为'hello'”。有没有一种方法可以通过编程检测解析失败?它似乎不会引发任何类型的异常。实现AntlErrorListener接口并将其添加到解析器: Parser#addErrorListener(ANTLRErrorListener); 通常,要首先删除默认控制台输出侦听器: Parser#remo

Antlr 令牌匹配,但它不应该';T

我正在尝试解析Windows头文件以提取函数原型。Microsoft成为Microsoft意味着函数原型不是常规的、易于解析的格式。通常,但并非总是用微软的结构化注释语言来注释常规参数,该语言从以下划线开头和结尾的标识符开始,中间可能有下划线。SAL标识符后面可能有括号,并包含各种编译时检查,但我不关心SAL的内容。例程通常使用访问说明符进行注释,访问说明符通常类似于WINAPI、APIENTRY等,但可能不止一个。在某些情况下,参数也仅由其类型指定。嘘 我的语法是这样的: // // Pars

“ANTLR模式”;第1行:9无关输入'';期望词;

我刚刚开始使用ANTLR。我正在尝试为如下字段定义编写一个解析器: field_name = value 例如: is_true_true = yes; 我的语法是这样的: 但是当我在'working=yes;'上运行生成的解析器时我收到错误消息: 第1行:7外部输入“”应为'=' 第1行:9外部输入“”应为单词 我不完全理解这一点,匹配单词-模式时是否有错误,或者完全是其他原因吗?您的示例中有空格,但您的字段定义没有说明原因。您的示例中有空格,但您的字段定义没有说明原因。因为通常情况下

ANTLR4意外的解析行为

我正试图用ANTLR构建一种新的语言,但我遇到了一个问题。我试图支持数字表达式和数字的数学运算(我认为这很重要),但解析器似乎并没有按照我的预期运行。这是我的语法: grammar Lumos; /* * Parser Rules */ program : 'start' stat+ 'stop'; block : stat* ; stat : assign |

如何从整个ANTLR AST树中切片子树?

我正在使用ANTLR4生成的解析器处理一些JavaScript文件。我不知道如何从ANTLR AST树中分割想要的子树。例如,如何按如下方式对图片中红方块中的子树进行切片 ANTLR AST树的一个示例: 您有两个选项:编写一个解析树侦听器或访问者以访问这些节点;或者,编写一个XPath表达式来查找这些节点。注意,在Antlr运行时中有一个XPath表达式搜索,但它非常有限。

解决ANTLR lexer规则歧义的正确方法?

请参阅以下位置提供的源代码: 我定义了两个令牌: ID : ('a'..'z' | 'A'..'Z') ('0'..'9' | 'a'..'z' | 'A'..'Z' | ' ')*; PITCH : (('A'|'a') '#'?) | (('B'|'b') '#'?) | (('C'|'c') '#'?); 显然,字母“A”是一个模棱两可的词 我进一步界定: note : PITCH; name : ID; main

antlr3-将闭包值读取到变量

我想在一个简单的文本行中解析和读取一个闭包值,如下所示: 1!某事 line : (NUMBER EXCLAMATION myText=~('\r\n')*) { myFunction($myText.text); } NUMBER : '0'..'9'+; EXCLAMATION : '!'; 我在myText变量中得到的只是'something'的最后一个'g',因为正如在生成的代码中所看到的,myText在每次出现~('\r\n')时都会在whil

antlr2到antlr4类说明符、选项、标记等

我需要将一个语法文件从antlr2语法重写为antlr4语法,并有以下问题 1) 巴特·基尔斯(Bart Kiers)表示,这里面有一个严格的顺序:语法、选项、标记、@header、@members。这不同意在选项之前声明标题。是否有资源说明antlr4的正确顺序(如果存在) 2) 同一篇antlr2.org文章指出:“语法的选项部分,如果指定,必须紧跟在类说明符的“;”之后: class MyParser extends Parser; options { k=2; } 但是,在使用antl

无法理解Antlr工具解析语法时出错

第85行是语句规则。我真的不知道为什么会失败。请帮忙 这是Antlr2 btw。是的,是的,超旧的,是的,是的 谢谢 对Antlr4玩得太多了:)在Antlr2中,我想令牌/规则必须包装在paren中才能应用*或+或…哈哈,太好了!这也可以解释为什么我在v3甚至v4语法中看到带括号的单标记:这些标记很可能是从v2语法移植而来的。谢谢Bart。更糟糕的是,我正在尝试支持我们使用Antlr 4所做的一些工作,以填充使用Antlr 2 lol的内容。因为您对Antlr非常了解,如果您有时间,您愿意看一

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