antlr相关内容

ANTLR4:词法分析器规则匹配错误

我刚刚开始学习 ANTLR4 词法分析器规则.我的目标是为 Java properties 文件创建一个简单的语法.这是我目前所拥有的: 词法分析器语法 PropertiesLexer;行注释:( 行注释哈希|行注释排除)->跳过;片段 LineCommentHash: '#' ~[\r\n]*;片段 LineCommentExcl:'!'~[\r\n]*;片段包裹线: '\\'( '\r' ' ..
发布时间:2021-11-11 04:08:23 其他开发

模棱两可的 ANTLR 解析器规则

我有一个非常简单的示例文本,我想用 ANTLR 解析它,但由于规则的定义不明确,我得到了错误的结果. 语法如下: grammar SimpleExampleGrammar;编:事件EOF;事件:DEFINE EVT_HEADER eventName=eventNameRule;事件名称规则:数字+;定义:'#define';EVT_HEADER : 'EVT_';数字:[0-9a-zA-Z ..
发布时间:2021-11-11 04:08:18 其他开发

具有冲突令牌的 ANTLR 行为

在令牌冲突的情况下,ANTLR 词法分析器行为是如何定义的?让我解释一下我所说的“冲突"令牌是什么意思.例如,假设定义了以下内容: INT_STAGE : '1'..'6';INT:'0'..'9'+; 这里有一个冲突,因为在读取了一系列数字后,词法分析器不知道是一个 INT 还是多个 INT_STAGE 标记(或两者的不同组合).经过测试,看起来如果 INT 在 INT_STAGE 之后定义 ..
发布时间:2021-11-11 04:08:15 其他开发

ANTLR4:词法分析器命令中无法识别的常量值

我正在学习如何使用“更多"词法分析器命令.我输入了 ANTLR 书籍第 281 页中显示的词法分析器语法: 词法分析器语法 Lexer_To_Test_More_Command ;LQUOTE : '"' -> more, mode(STR) ;WS : [ \t\r\n]+ ->跳过 ;模式 STR ;字符串:'"' -> 模式(DEFAULT_MODE);文本 : .->更多的 ; 然后我 ..
发布时间:2021-11-11 04:08:09 其他开发

未调用我的词法分析器令牌操作

我使用 antlr4 和 javascript 目标. 这是一个示例语法: P : T ;T : [a-z]+ {console.log(this.text);};开始:P; 当我运行生成的解析器时,虽然输入匹配,但没有打印任何内容.如果我将操作移动到标记 P,则它会被调用.这是为什么? 解决方案 在引用的规则中忽略操作.这是 ANTLR 4 的原始行为,当时词法分析器仅支持每个 ..
发布时间:2021-11-11 04:07:58 其他开发

ANTLR4 相当于什么!在词法分析器规则中?

我正在将旧的 ANTLR 2 语法转换为 ANTLR 4,但在字符串规则方面遇到了问题. STRING :'\''!(~('\'' | '\\' | '\r' | '\n'))*'\''!; 这将创建一个 STRING 标记,其文本包含字符串的内容,但 不包含开始和结束引号,因为 ! 引号文字后的符号. ! 符号上的 ANTLR 4 扼流圈,('!' 对我来说完全出乎意料 (AC0050 ..
发布时间:2021-11-11 04:07:55 其他开发

ANTLR4 中期望的外来输入“-"

你能告诉我可能是什么问题吗?期望 {, '(', NUMBER, VARIABLE},但如果我在 - 之后插入此规则,则会出现相同的错误. grammar 语法;@header {包解析器;}程序:行* EOF ;行: (表达式 | 赋值) ('\n' | EOF);赋值:VARIABLE '=' 表达式;表达式 : '(' 表达式 ')' #parenthesisExpression|左=表达 ..
发布时间:2021-11-11 04:07:43 其他开发

ANTLR4 相互左递归

我刚刚在 ANTLR 4.2.2 中遇到了一个奇怪的问题: 考虑一个(简化的)java 语法.这不会编译: classOrInterfaceType: (classOrInterfaceType) '.'标识符|标识符; ANTLR 输出以下错误: error(119): Java.g4:::: 以下规则集相互左递归 [classOrInterfaceType] 是的,我也看到了左 ..
发布时间:2021-11-11 04:07:23 其他开发

使用 ANTLR4 设计灵活语言应用程序的一般策略

要求: 我正在尝试使用 antlr4 开发语言应用程序.所讨论的语言并不重要.重要的是语法非常广泛(容易> 2000 条规则!!!).我想做多项操作 提取大量信息.这些可以是调用图、变量名称.常量表达式等 任意数量的转换: 如果循环可以扩展,我们继续扩展它 如果我们可以消除死代码,我们可能会选择这样做 我们可能会选择重命名所有变量名称以符合某些规范. 这些操作中的每一个都 ..
发布时间:2021-11-11 04:07:08 其他开发

如何在 antlr4 中报告语法歧义

根据antlr4 book(第159页),使用语法Ambig.g4,可以通过以下方式报告语法歧义: grun Ambig stat -diagnostics 或等效地,以代码形式: parser.removeErrorListeners();parser.addErrorListener(new DiagnosticErrorListener());parser.getInterpreter ..
发布时间:2021-11-11 04:07:03 其他开发

ANTLR 语法迁移工具

假设我有以下简单的语法(查询 DSL): grammar TestGrammar;术语:文本术语;textTerm : '文本' '(' T_VALUE '=' STRING+ ')' ;T_VALUE : '值';字符串:'"' .+? '"' ;WS : [ \t\r\n]+ ->跳过 ; 然后在某些时候我决定需要更改文本术语格式,例如: Text(value = "123") ->My ..
发布时间:2021-11-11 04:07:00 其他开发

如何在 ANTLR4 中捕获无关输入?

我想在 antlr4 中捕获无关的错误.它只打印到 stderr 之类的东西 行 1:16 无关输入“三"期望 {, PLUS_MINUS, MUL_DIV} 但不会抛出任何错误. 解决方案 ANTLR 词法分析器实现了 ANTLRErrorListener 接口并将其初始化为 ConsoleErrorListener. 在您构建词法分析器的代码中,可选择删除 ConsoleE ..
发布时间:2021-11-11 04:06:57 Java开发

在 ANTLR4 中使用什么来解决更复杂情况下的歧义(而不是句法谓词)?

在 ANTLR v3 中,句法谓词可用于解决歧义,即明确告诉 ANTLR 应选择哪个替代方案.ANTLR4 似乎只接受具有相似歧义的语法,但在解析过程中它会报告这些歧义.尽管存在这些歧义,它还是生成了一个解析树(根据文档,通过选择第一个选项).但是,如果我想让它选择其他替代方案,我该怎么办?换句话说,我怎样才能明确地解决歧义? (对于悬空 else 问题的简单情况,请参阅:在 ANTLR4 ..
发布时间:2021-11-11 04:06:51 其他开发

ANTLR 4 - 树模式匹配

我正在尝试理解 ANTLR 4 中的解析树匹配,所以为此我有以下 java 代码: package sampleCodes;公共课水果{公共静态无效主(字符串 [] args){int a = 10;System.out.println(a);}} 我正在使用 ANTLR 4 创建此代码的解析树.现在,我想使用树模式匹配函数来查找“int a = 10;".GitHub 上有一个文档:http ..
发布时间:2021-11-11 04:06:49 Java开发

在侦听器中使用 ParserRuleContext 遍历令牌 - ANTLR4

在使用侦听器迭代令牌时,我想知道如何使用 ParserRuleContext 来查看令牌流中的下一个令牌或接下来的几个令牌? 在下面的代码中,我试图查看当前令牌之后直到 EOF 的所有令牌: @Override公共无效输入分号(JavaParser.SemicolonContext ctx){令牌tok,semiColon = ctx.getStart();int currentIndex ..
发布时间:2021-11-11 04:06:34 Java开发

使用 ANTLR4 识别单行中的多行注释

我想用 ANTLR4 解析 PostScript 代码.我完成了语法,但是一个特定的语言扩展(由其他人引入)导致难以重新调整. 一个简短的例子: 1: % 这是一行注释2: % 下一行只是将值 10 压入堆栈3:104:5: %?description 这是有问题的特殊行注释6:/过程{7:/var1 30 def %这只是创建一个变量8:/var2 10 def %?descriptio ..
发布时间:2021-11-11 04:06:32 其他开发