antlr4相关内容

存在相似模式时,ANTLR 无法正确匹配模式

我正在使用 ANTLR 来解析一些查询. 这是我的 ANTLR g4: propTest: objectPath 不是?(EQ|NEQ)primitiveLiteral # propTestEqual|对象路径不是?(EQ|NEQ) 'wwww' # propTestThlEqual;原始文字: 可订购文字|布尔文字;原始文字: 可订购文字;可订购文字: 字符串字面量;字符串字面量: QU ..
发布时间:2021-11-11 04:13:02 其他开发

用antlr制作计算器

我对使用 antlr 非常陌生.我正在制作一个计算器,我已经制作了我的语法.如果我使用侦听器而不是访问者,是否可以获得结果?我不知道这是否有意义,但我正在使用侦听器,我唯一能做的就是让它打印出输入而不是输入的计算结果.我在网上查过,每个例子都使用了访问者.那么我应该使用访问者还是在使用侦听器时可以得到结果?我希望这是有道理的. 这是我的 g4 文件 语法计算;TYPE_INT: 'int' ..
发布时间:2021-11-11 04:12:59 Java开发

如何在 ANTLR 4 中创建可以捕获不同类型词法错误的词法分析器

我正在使用 ANTLR 4 创建我的词法分析器,但我不知道如何创建一个词法分析器来捕获不同类型的词法错误. 例如: 如果我有一个像 ^ 这样无法识别的符号,词法分析器应该会报告这样的错误“无法识别的符号“^"" 如果我有一个像 2n 这样的无效标识符,词法分析器应该报告这样的错误“标识符“2n"必须以字母开头" 请你帮帮我. 解决方案 为每个已知错误创建一个错误标记 ..
发布时间:2021-11-11 04:12:56 Java开发

ANTLR:将 NULL 解析为函数名和参数

我希望能够将“NULL"同时用作参数(值null)和函数名称语法.请参阅此简化示例: 语法测试;表达式: value # valueExpr|FUNCTION_NAME '(' (expr (',' expr)* )* ')' # functionExpr;价值: INT|'空值';FUNCTION_NAME: [a-zA-Z] [a-zA-Z0-9]*;INT:[0-9]+; 现在,尝试解析 ..
发布时间:2021-11-11 04:12:53 Java开发

使用ANTLR4生成修改后的代码

我正在尝试使用 antlr4 使用 C.g4 语法. 我想知道是否有办法更改解析树节点内的文本,然后从编辑后的树开始生成新的 .c 文件. 我的目标基本上是用 替换所有函数名称 解决方案 一个函数名——看起来是一个“标识符"——将被表示为一个 TerminalNode(扩展 ParseTree,它是基本的解析树节点).因此,在适当的上下文中, TerminalNode id = ..
发布时间:2021-11-11 04:12:50 其他开发

antlr4:语法歧义,左递归,两者都有?

我的语法(如下所示)无法编译.返回的错误(来自 antlr4 maven 插件)是: [INFO] --- antlr4-maven-plugin:4.3:antlr4 (default-cli) @ beebell ---[信息] ANTLR 4:处理源目录/Users/kodecharlie/workspace/beebell/src/main/antlr4[INFO] 处理语法:DateR ..
发布时间:2021-11-11 04:12:44 其他开发

如何根据语法拆分输入

我们正在尝试为路由器中生成的日志文件构建解析器.我们成功构建并能够在特定文件中打印有效语言. 但是如果根据语法输入是无效的,那么我们想把它打印在不同的文件中.我们尝试了一些东西,但它无法正常工作.你能建议我们这样做的方式吗?如果可能,请提供工作示例. 这是我们尝试过的. 我们没有使用任何特定的 IDE,只是一个文本编辑器.vANTLR-4.5 我们的输入:(input.tx ..
发布时间:2021-11-11 04:12:41 Java开发

ANTLR4 - 如何解析相同字符串值之间的内容

我正在尝试编写一个 antlr4 解析器规则,该规则可以匹配某些相同的任意字符串值之间的内容.到目前为止,我找不到一种方法来做到这一点. 例如,在下面的输入中,我需要一个规则来提取 Hello 和 Bye.不过,我对提取 xyz 不感兴趣. TEXT 你好 TEXT TEXT1再见TEXT1 TEXT5 xyz TEXT8 由于它非常类似于 XML 元素语法,我尝试了 ..
发布时间:2021-11-11 04:12:35 其他开发

用于拆分数字的antlr4语法

语法Te;/** 解析器规则*/测试:(示例+ EOF);例如:数字 COMMA digit2 NEWLINE;数字:(INT)+?;digit2: (INT INT INT INT)+?;/** 词法分析器规则*/INT :[0-9];逗号:',';新行 : ('\r'? '\n' | '\r')+ ; 这是我写的语法,用于将数列考虑为一位数,直到检测到逗号,然后将数列考虑为 4 位 例 ..
发布时间:2021-11-11 04:12:32 其他开发

ANTLR 4 无关输入匹配非词法分析器项目

我有这样的语法: grammar MyGrammar;字段:f1(中风 f2 f3)?;f1:字段文本+;f2 : 'A' ;f3 : NUMBER4 ;字段文本: ~['/'] ;NUMBER4:[0-9][0-9][0-9][0-9];中风 : '/' ; 这很有效,并且字段 f1 f2 f3 都已正确填充. 除非/左边有一个A,(不管是否存在可选部分)这会额外导致一个错误: 额外 ..
发布时间:2021-11-11 04:12:29 其他开发

Antlr 检查范围内的返回语句

我想知道如何在语法分析期间检查所有路径是否在函数中都有返回值.所以说我在词法分析器中有以下内容 返回:'返回';打印:'打印';如果如果';ELSE: '其他';THEN:'然后';加号:'+';减:'-';等于:'==';数字:'0'..'9';打开:'{';关闭:'}';字符串:[a..zA..Z]+;分号:';'; 和解析器 函数:STRING OPEN 语句 CLOSE声明: RET ..
发布时间:2021-11-11 04:12:26 Java开发

ANTLR4:为特定规则调用不同的子解析器

考虑这个非常简单的例子,其中应该匹配以下表单的输入 mykey ->这就是价值 我的真实案例要复杂得多,但这将有助于展示我尝试实现的目标.mykey 是一个 ID 而在 -> 的右侧,我们有一组 Words.如果我使用 语法根;解析: ID '->'价值;价值: 字+;ID:('a'..'z')+;单词: ('a'..'z' | 'A'..'Z' | '0'..'9')+;WS: ' ' - ..
发布时间:2021-11-11 04:12:23 其他开发

匹配错误规则

我在词法分析器中有以下内容 整数:数字+;不是: '!';减:'-';加号:'+';片段数字:'0'..'9'; 我在解析器中有以下内容 expr:字面量|一元运算表达式;字面量:(加号|减号)?整数;一元运算:NOT|MINUS; 当我使用 grun 用 -2 测试它时,我发现它与 UnaryOp expr 匹配,而不仅仅是 intLiteral.换句话说,减号被检测为 UnaryOp. ..
发布时间:2021-11-11 04:12:20 Java开发

用于字母数字单词的 ANTLR 解析器,它们之间可能有空格

首先我尝试识别一个正常的单词,下面的工作正常: 语法测试;我的令牌:字;单词:(小写 | 大写)+ ;片段小写:[a-z];片段大写:[A-Z];片段数字:'0'..'9';空格 : (' ' | '\t')+; 就在我在“myToken"下面添加解析器规则时,即使我的 WORD 标记也没有被输入字符串识别为“abc" ALPHA_NUMERIC_WS: ( WORD | DIGIT | W ..
发布时间:2021-11-11 04:12:18 其他开发

ANTLR 识别单个字符

我很确定这是不可能的,但我想问一下以防万一. 我有通用 ID 令牌定义: ID: LETTER (LETTER | DIG)*; 问题是在我需要解析的语法中,有一些指令将单个字符作为操作数,例如: a + 4 但是 ab + 4 不可能. 所以我不能写这样的规则: sum: (INT | LETTER) ('+' (INT | LETTER))* 因为 lexer 会将 ..
发布时间:2021-11-11 04:12:14 其他开发

ANTLR4 AST 创建 - 如何创建 AstVistor

借助这个 SO 问题如何使用 ANTLR4 创建 AST? 我能够创建 AST 节点,但我一直坚持编写 BuildAstVisitor,如已接受的答案示例中所述. 我有一个这样开头的语法: mini: (constDecl | varDef | funcDecl | funcDef)* ; 而且我既不能给块分配标签(antlr4说标签X分配给一个不是集合的块),我也不知道如何访问下一个节 ..
发布时间:2021-11-11 04:12:12 Java开发

为什么 antlr4 将我的句子解析为两个语句?

我正在为表达式编写一个小解析器.目前我只是想让它识别二进制乘法 (myId * myId) 和类似 C 的解引用指针 (*myId),加上一些赋值语句 (myId*= myId). 使解析器抛出错误的输入是: x *= y; ...解析器失败并显示此消息和解析树: [line 1:1 不匹配的输入 '*' 期望 {';', NEWLINE}](sourceFile (statement ..
发布时间:2021-11-11 04:12:09 其他开发

Antlr4 导入组合语法失败

我现在正在…… error(56): AqlCommentTest.g4:12:4: 对未定义规则的引用:htmlCommentDeclaration错误(56):AqlCommentTest.g4:13:4:对未定义规则的引用:mdCommentDeclaration 词法分析器语法的导入似乎正在加载.以下文件存在问题. AqlCommentTest.g4 grammar AqlCo ..
发布时间:2021-11-11 04:12:06 其他开发

当子规则被标记时,ANTLR4.7 监听器

我有一个这样的 antlr4.7 语法,其中所有子规则都被标记. date_expr: attr op=( '+' | '-' ) dt_interval=ISO8601_INTERVAL#dateexpr_Op|DATETIME_NAME#dateexpr_Named|d=( DATETIME_LITERAL | DATE_LITERAL | TIME_LITERAL )#dateexpr_L ..
发布时间:2021-11-11 04:12:03 其他开发

如何解决歧义

我有一个语法: 语法测试;s : ID OP (NUMBER | ID);ID : [a-z]+ ;数字 : '.'?[0-9]+ ;操作:'/.'|'/';WS : [ \t\r\n]+ ->跳过 ; 像 x/.123 这样的表达式既可以解析为 (sx/. 123),也可以解析为 (sx/.123).通过上面的语法,我得到了第一个变体. 有没有办法得到两个解析树?有没有办法控制它的解析 ..
发布时间:2021-11-11 04:12:00 其他开发