Antlr4 将Antlr对象重新用于新的输入字符串(C+;+;运行时)? 我用C++运行时演示程序构建了一个基本的解析器,它工作得很好。然而,我通常解析大量输入字符串,是否可以修改代码以重用现有对象进行重复调用?如果是这样,有人有这样的例子吗?

是的,重用对象是可能的。解析调用的典型序列如下所示: input.load(newText); errors.clear(); lexer.reset(); lexer.setInputStream(&input); // Not just reset(), which only rewinds the current position. tokens.setTokenSource(&lexer); parser.reset(); ... 这可能是解析器服务类的一部分。所有对

Antlr4不匹配输入

首先,我阅读了以下类似问题的解决方案: 我仍然不明白为什么我会收到以下信息: 行1:0在“程序”处缺少“程序” 当我尝试匹配以下内容时: PROGRAM test BEGIN END 我的语法: grammar Wengo; program : PROGRAM id BEGIN pgm_body END ; id : IDENTIFIER ; pgm_body : decl func_declarations ; decl

Antlr4 无法为非组合语法中的字符串文字创建隐式标记:

这是我的XML解析器语法: attribute : Name '=' STRING ; 还有lexer: STRING : '"' ~[<"]* '"' | '\'' ~[<']* '\'' ; 我把文本用引号括起来,比如:“hello”,而不是hello。 因此,我尝试将解析器语法更改为: attribute : Name '=' '"' STRING ; 或 我得到了一个错误:“无法为非组合语

Antlr4 使用ANTLR分析包含单引号的引号之间的字符串

我希望能够解析像“test”test这样的字符串 使用ANTLR4 我的语法: QUOTE: ('\''|'"'); STRING: QUOTE .*? QUOTE; SQUOTE: '\''; DQUOTE: '"'; STRING: (SQUOTE .*? SQUOTE | DQUOTE .*? DQUOTE ); 我的解析器: matcher: STRING; 在另一个员额上,提议下列可能性: 语法: QUOTE: ('\''|'"'); STRING: QUOTE .*? QU

如何使用ANTLR4构建AST?

我有一个ANTLR3语法,它构建了一个抽象语法树。我正在考虑升级到ANTLR4。然而,ANTLR4似乎只构建解析树,而不是抽象语法树。例如,output=AST选项不再被识别。此外,AST和抽象语法均未出现在最终ANTLR4参考的文本中 我想知道我是否遗漏了什么 我的应用程序目前知道如何爬过ANTLR3生成的AST。将其更改为处理解析树并不是不可能的,但需要做一些工作。在我开始这条路之前,我想确定这是必要的。ANTLR 4基于语法生成解析树,而不是基于任意AST运算符和/或重写规则生成AST。这

Antlr4 ANTLR 4优先级不符合预期

我定义了一种我们在公司中使用的SQL风格,如下所示: /** Grammars always start with a grammar header. This grammar is called * GigyaSQL and must match the filename: GigyaSQL.g4 */ grammar GigyaSQL; parse : selectClause fromClause ( whereClause )? ( filterClause

ANTLR4:如何在gramar中查找根规则,它可能用于查找开始规则

我一直在看位于以下位置的语法: 我一直在使用AntlRworks2查看它们,但是我发现很难找到整个语法的开始规则 我认为开始规则的定义是一个没有其他指向它的指针的节点,有没有人能找到这些语法的开始规则的有效解决方案?要找到根/开始规则,我已经实现了一个ANTLR树侦听器,它创建了ANTLR语法中所有规则的邻接列表,并检查是否没有其他语法规则引用它。这将提示开始规则可能是什么 要运行此程序,您需要从 以下是侦听器实现: (RootFinder.java) 从技术上讲,您可以使用任何解析器规则作为

如何在Antlr4中为不匹配或部分标记创建解析器规则

我有(从第109行开始)在IDE中用于收集有关正在编辑的源代码文件(其Z80程序集)的信息 我需要触发一个解析器规则,或者有一个健壮的方法来解释解析树(ErrorNodes),以检测用户输入的不完整/部分文本 我添加了一个“部分”解析器规则,它使用底部定义的任意标记捕获所有字符。然而,这不起作用 我还试着查看解析树,看看是否有某种方法可以编写逻辑(在我的侦听器中)来将其提取出来,但似乎新的部分文本有时甚至没有出现在解析树中…听起来像是孤岛语法。通常的过程(例如,请参阅ANTLR 4书中的“将XM

ANTLR4目标文件名

对于Sam和我一直在研究的问题,我想让代码生成工具创建一个单独的typescript文件来保存从命名语法输入生成的所有类。这个输出文件结构会很难吗 例如,我想要Expr.g4->Expr.g4.ts。一个文件TypeScript文件可以包含{ExprLexer、ExprParser、和ExprListener}类的命名导出,如果需要,还可以包含访问者代码,甚至可能是一些松散的工厂函数等 我一直在研究下面的源代码,以了解输出文件的数量和名称是如何确定的,特别是发现,这个类与特定于语言的目标类一起工

Antlr4 在访问Antlr规则时区分可选标记

这个问题是关于如何在访问antlr规则时区分可选标记 我在一个名为“assign”的antlr4语法中定义了一个解析器规则,它试图将表达式的结果分配给由INT表示的标记,例如215=“FOO”。它还允许分配到标记索引,例如215[2]=“FOO”。我的问题是,在赋值规则的评估过程中,如何通过查看antlr提供的对象来区分表单215的整数与表单215[2]的整数 assign : INT '=' expr ; INT : '-'? DIGIT+ ('[' DIGIT+ ']')?; D

ANTLR4是另一个左递归

我很不好意思问。。。 我用typecast为这种语言编写了一个语法,从int到bool,反之亦然 logic_expr : expr NOT? OR | AND expr | expr '|' expr SMALLER | LARGER | NUMBER | NUMBER_SHORT | IDENT | LOGIC_DEFINED ; math_expr : expr ADD | SUB expr |

Antlr4 如何修复解析器规则中的警告:隐式令牌定义

我将Antlr4语法简化为: grammar test; many: ('[' INT ']')*; INT: '-'? '0'..'9'+; 在ANTLRWorks 2.1中,它在“[”和“]”上给出警告 Implicit token definition in parser rule 为什么它们是警告 我不应该在语法分析器规则中使用直接字符或字符串?隐式标记引用是语法分析器规则中的字符串文本,它包含由ANTLR4隐式创建的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:输入不匹配

我是antlr的新手。我想写一个语法来解析以下输入: commit a1b2c3d4 语法如下所示: grammar commit; file : 'commit' COMMITHASH NEWLINE; COMMITHASH : [a-z0-9]+; DATE : ~[\r\n]+; NEWLINE : '\r'?'\n'; 当我尝试使用语法解析上述输入时,它抛出以下异常:: 第1行:0不匹配的输入“提交a1b2c3d4”应为“提交” 注意:我故意添加了日期标记。如果

用于解释器的antlr4语法-在输入文件中定义入口点

我试图弄清楚如何使antlr4在输入文件中的给定点而不是顶部执行。我听取了SO用户的建议,并开始使用Antlr4访问者解决方案 我的输入文件声明了类似“BASIC”的子例程,并且在底部有一个Main。输入文件示例: #Program hello; Sub mysub1() print "please dont call me but I know you will"; End Sub Sub mysub2() #code End Sub

getType在antlr4中做什么?

这个问题与本书中的Cymbol代码有关(~第143页): 每个组件返回什么:“ctx.type()”、“start”、“getType()”?这本书没有对这些名字作任何解释 我可以“有点”理解“ctx.type()”指的是“type”规则,“getType()”返回与之关联的数字。但是“开始”到底是做什么的呢 另外,概括一下这个问题:获取规则返回的值/结构的机制是什么?特别是在侦听器中使用的上下文中 我可以看到,对于ID,它是: String name = ctx.ID().getText();

Antlr4 解析单行注释

我试图写一个语法来解析单行注释。以“---”开头的注释可以出现在文件中的任何位置 我的基本语法如下所示 语法(aa.g4): 测试等级: 输入: 输出: --comment1a --ifcommentif(x)首先,您应该定义您真正想要的行注释规则。非贪婪运算符没有按您所希望的方式执行 LineComment : '--' ~[\r\n]* -> channel(HIDDEN) ; 其次,如果希望令牌流包含有关空格和换行符的信息,则应将它们移动到隐藏通道,而不是使用skip命令。

Antlr4 如何表达所需的';返回';语法中的语句

我还是ANTLR的新手,如果我发布了一个明显的问题,那么很抱歉 我的语法比较简单。我需要的是用户能够输入以下内容: if (condition) { return true } else if (condition) { return false } else { if (condition) { return true } return false } 在我下面的语法中,是否有方法确保在输入字符串不包含“return”语句时标

Antlr4 从AST生成源代码

我知道任何源代码都可以转换为AST。现在我想将AST转换回源代码,但与语言无关。有什么工具可以帮我吗? 所谓语言独立,我特别指的是python和java您心目中的是源代码转换器,它涉及的不仅仅是从解析树生成一些代码(ANTLR4不创建AST btw)。通常,这样的翻译器将解析树转换为一个中间表示,它抽象出各种语言结构,然后使用这些结构在目标语言中生成代码(对目标语言中不可用的源语言、优化等进行了大量特殊处理).根据我的意见,您不能将AST转换回源代码。因为生成的ast可能是任何语言,并且您无法将

Antlr4 如何在括号内定义替代标签n

这是我的解析器语法的一部分: expression: multiplyingExpression ( PLUS multiplyingExpression #plus | MINUS multiplyingExpression #minus )*; 我想定义加减替代标签,显然它不允许我这样做 在#加号和@减号处,它给出了错误: 查找规则元素时在“#”处缺少RPAREN 有人知道如何在不改变规则定义结构的情况下实现这一点吗?alt标签只能在alt的外边缘(非

使用antlr4和java解析器解析objective-c代码时出错,但可以使用grun

我使用的是一步语法,当我运行grun时,它非常有效: grun ObjectiveC translationUnit~/Desktop/test.h-gui 但是,当使用以下代码运行生成的java解析器时: 试试看{ AntlInputStream inputStream=新的AntlInputStream( “@interface TestInterface\r@property(非原子,赋值)BOOL testProp;\r@end”); ObjectiveCLexer lexer=新的Ob

Antlr4语法';t解析多行输入

我想用Antlr4编写一个语法来解析某个定义,但我一直在努力让Antlr合作 定义有两种类型的线,一种类型,一种属性。我可以让语法正确解析类型行,但它要么忽略属性行,要么无法识别属性类型,这取决于我如何调整语法 这是我的语法(尝试583): 以下是一个示例输入: type SimpleType intProp1: int stringProp2 : String (返回类型,但忽略intProp1、stringProp2。) 我做错了什么?通常,当规则与整个输入不匹配

Antlr4 如何为本地化的数字格式编写解析器规则?

当十进制和千位分隔符十进制分组字符依赖于区域设置调用系统时,如何编写正确解析浮点数的Antlr v4语法 目前,我尝试在传递到解析器之前交换输入字符串中的字符,虽然这可以工作,但感觉像是一个黑客。有没有办法制作一个参数化解析器,其中一些东西可以作为参数传递,比如这些标记的字符值?解析器和lexer构造算法通常假设字母表是固定的,而不是可变的。在构造时准备运行时决策时,这是一个非常有用的假设,而且语言定义是明确的 请注意,当嵌入到更复杂的上下文中时,本地化的数字可能会导致歧义。例如,在德语中,用逗

AST解析器树ANTLR4

在使用java org.antlr.v4.Tool-visitor-lib scanner/parser/decf.g进行这些操作之后,生成了该指令(DecafParserBaseListener.java、DecafParserBaseVisitor.java、DecafParserListener.java、decafparservicistor.java)。我们的问题是如何使用这种方法来制作AST Short:在Antlr4中还没有。 它在Antlr3中可用,但到目前为止已在Antlr4的

Antlr4 ANLTR4输入不匹配

我正试图为CAL语言编写一个解析器,但遇到了以下错误 line 3:12 mismatched input ')' expecting {'(', '+', '-', True, False, Number, ID} line 8:4 no viable alternative at input 'func' line 8:10 mismatched input ')' expecting {If, While, Skipp, Begin, ID} line 8:11 extraneous in

上一页 1 2 ...  10   11   12    13   14   15  ... 下一页 共 15 页