antlr4相关内容

如何手动重写 Antlr4 解析树?

我正在开发一个简单的 Xquery 处理器并使用 Antlr4 来解析语法.我使用访问者模式遍历解析树.现在,如果查询满足某个条件,我想重写一个查询.如果查询直接使用诸如“join"之类的关键字并满足“join"语法,则处理器现在可以处理查询. 如果查询可以更改为连接查询,我想首先重写解析树,否则什么都不做.有没有办法手动操作解析树?喜欢添加规则上下文或构建新的解析树? 解决方案 对 ..
发布时间:2021-11-11 04:09:51 其他开发

用 unicode 编写语法规则名称 [ANTLR 4]

我仍然是 ANTLR 4 的初学者,我想知道是否有办法用 unicode 编写语法规则名称.例如,以下规则很好: atomExp 返回 [double value]: n=Number {$value = Double.parseDouble($n.text);}|'(' exp=additionExp ')' {$value = $exp.value;}; 但是,假设我想编写相同的规 ..
发布时间:2021-11-11 04:09:48 Java开发

ANTLR4 - 从非文件输入生成代码?

我们从哪里开始手动构建 CST?还是 ANTLR4 总是需要 lex/parse 过程作为我们的输入步骤? 我的程序中有一些表示代码结构的视觉元素. 例如一个正方形代表一个类,而嵌入在该正方形中的一个圆圈代表一个方法. 现在我想把它们变成代码.我如何在运行时使用 ANTLR4 来做到这一点(使用 ANTLR4.js)?大多数 ANTLR 示例似乎都依赖于词法分析和解析现有代码来获 ..
发布时间:2021-11-11 04:09:45 其他开发

ANTLR ParseTree 的序列化

我有一个生成的语法,它可以做两件事: 检查特定领域语言的语法 针对特定领域的语言评估输入 这两个函数是独立的,我们称它们为validate() 和evaluate(). validate() 函数从字符串输入构建树,同时确保它满足 BNF 对语言的要求.evaluate() 函数将值插入到该树中以获得结果(通常为 true 或 false). 代码当前所做的是每次对输入运 ..
发布时间:2021-11-11 04:09:40 其他开发

如何删除以下语法中的左递归?

不幸的是,当规则传递参数时,ANTLR 不可能支持直接左递归.唯一可行的选择是删除左递归.有没有办法去掉下面语法中的左递归? a[int x]: b a[$x] c|[$x - 1](c a[$x - 1]|乙丙); 问题在于涉及左递归的第二种选择.任何形式的帮助将不胜感激. 解决方案 没有参数和更简单的格式,它看起来像这样: a: b c|a (c a | b c); 当 a 的 ..
发布时间:2021-11-11 04:09:37 其他开发

如何在 ANTLR4 中终止词法分析器

是否有一种简单的方法可以终止词法分析器? 有些令牌我还不想处理.但我也希望 Lexer 在输入确实包含这些标记时发出警报.我的简单策略是在一个动作中抛出一个 RuntimeException: CHARIZING: '#@' {throw new RuntimeException("charizing op 不支持");}; 但是该操作会产生编译错误,因为生成的 Lexer 在该操作之后 ..
发布时间:2021-11-11 04:09:34 其他开发

antlr4 在令牌中混合片段

我观察到一种奇怪的行为,尝试使用包含如下语句的语法来解析文本: 片段 A : ('a'|'A') ;片段 D : ('d'|'D') ;片段 N : ('n'|'N') ;KEY_AND : A N D; 我创建了一个简单的语法来产生我遇到的问题: grammar AndTest;mainRule: NAME SEP KEY_AND SEP NAME;名称: ('A'..'Z')+ ;九月: ..
发布时间:2021-11-11 04:09:31 其他开发

ANTLR4 - 点生成器示例

在哪里可以找到如何在 ANTLR4 中使用 org.antlr.v4.tool.DotGenerator 的示例? 据我所知,它取代了 ANTLR4 中的 DOTTreeGenerator. 解决方案 我也对您问题的答案感兴趣,但尚未找到完全令人信服的答案. 假设您有兴趣在此处显示 ParseTree 是一种至少获得视觉表示的替代方法: /*** 显示给定的树查看器* @pa ..
发布时间:2021-11-11 04:09:25 其他开发

在ANTLR中所有情况下都可以消除左递归吗?

说我有以下内容 语法 #1 expr:expr 和 expr|expr 或 expr|基本的; 然后变成了这个. 语法#2 expr:和Expr|基本的;andExpr: orExpr AND orExpr;orExpr: ... 或 ...; 但我仍然不明白这将如何解决问题?在语法 #1 我可以表达 真假真假真假真假真假 我可以用 Grammar #1 保持这样的链接.但 ..
发布时间:2021-11-11 04:09:19 其他开发

使用 Python 目标处理 ANTLR4 语法中的换行符

我正在研究用于解析 Python DSL 脚本的 ANTLR4 语法(基本上是 Python 的一个子集),目标设置为 Python 3.我在处理换行时遇到困难. 在我的语法中,我使用基于 Bart Kiers 用于 ANTLR4 的 Python3 语法,它们移植到 Python 以便它们可以与 Python 3 一起使用ANTLR 而不是 Java 的运行时.我的语法与 Bart 提供的 ..
发布时间:2021-11-11 04:09:14 其他开发

Antlr:如何匹配其他已识别令牌之间的所有内容?

如何匹配词法分析器中其他标记之间的所有剩余文本? 这是我的代码: 语法用户查询;expr: expr AND expr|expr 或 expr|不是表达式|文本+|'('expr')';或:'或';与:'与';不是这样的';LPAREN : '(';RPAREN : ')';文本:.+?; 当我在“xx AND yy"上运行词法分析器时,我得到这些标记: x 类型:TEXTx 类型:文 ..
发布时间:2021-11-11 04:09:10 其他开发

如何调试ANTLR4语法无关/不匹配的输入错误

我想解析规则手册“demo.rb"文件,如下所示: rulebook Titanic-Normalization {版本 1元{描述“测试"来源“我的规则.xslx"用户“joltie"}规则删除第一行{描述“当偏移为零时删除第一行"when(present(offset) && offset == 0) then {filter-row-if-true 真;}}} 我编写了如下所示的 ANT ..
发布时间:2021-11-11 04:09:08 其他开发

ANTLR4 解析器问题

我正在尝试为 C++ 风格的头文件编写解析器,但未能正确配置解析器. 词法分析器: 词法语法HeaderLexer;部分行注释: LINE_COMMENT_SIGN 部分 CharacterSequence;编译指示: 磅'pragma';部分:AT_SIGN '部分';定义: 磅“定义"|LINE_COMMENT_SIGN POUND '定义';布尔文字: 错误的|真的;引用字符序列: ..
发布时间:2021-11-11 04:09:04 其他开发

用于多语言生成的 Antlr

这篇关于 antlr 简单示例的帖子展示了如何创建和我们java的语法. 然而,这在 Exp.g 源代码中混合了语法和 Java 源代码. 我的问题是,是否可以将语法文件与目标语言解耦,以便一个语法文件可以用于生成多个 Java、Scala、C++ 等词法分析器/解析器? 解决方案 这主要取决于语法中使用目标代码的原因.是否只是对找到的标记执行某些操作的操作代码(例如,构建符号 ..
发布时间:2021-11-11 04:08:58 其他开发

Antlr - 为 C.g4 解析多行 #define

我正在使用 Antlr4 来解析 C 代码.我想解析多行 #defines 以及提供的 C.g4C.g4 但是上面链接中提到的语法不支持预处理器指令,所以我添加了以下新规则来支持预处理. 链接到我之前的问题 空格: [ \t]+->频道(隐藏);新队:( '\r' '\n'?|'\n')->频道(隐藏);区块评论: '/*' .*?'*/';行注释: '//' ~[\r\n]*;包含 ..
发布时间:2021-11-11 04:08:56 Java开发

ANTLR 词法分析器规则似乎只作为解析器规则的一部分工作,而不是另一个词法分析器规则的一部分

如果我有以下语法来解析由空格分隔的整数列表: 语法测试;测试: 表达式* EOF;表达: 整数文字;整数文字: 字面意思;加号:'+';减: '-';数字:'0'..'9';数字:数字+;文字:(加号|减号)?数字;WS: [ \t\r\n] ->跳过; 它不起作用!如果我通过“100",我会得到: 行 1:0 无关输入 '100' 期望 {, INLITERAL} 但是,如果删除词法分 ..
发布时间:2021-11-11 04:08:53 其他开发