antlr相关内容

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

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

Antlr4,如何报告特定的语法错误

我正在尝试使用 antlr4 为我的简单语法编写一些错误检查. 语法本身是由函数构造的. 即 FUNCTION hello (n){......}函数主 (n) {......} 我不确定它是如何捕捉特定错误的,例如缺少函数名称或缺少主函数 这是我的 ErrorListener 的样子 import org.antlr.v4.runtime.*;导入 org.antlr.v ..
发布时间:2021-11-11 04:10:11 其他开发

antlr 4:所有这些令牌都应该出现在 AST 中吗?

我的最终目标是将结构化文件解析为内存中对象树,然后我可以对其进行操作.我使用的文件格式相当复杂,大约有 200 个关键字/标签,这似乎是学习解析器/词法分析器框架的一个很好的理由. 不幸的是,有太多的概念(以及数百个教程和指南),到目前为止的学习过程感觉就像试图用消防水管喝水.所以我正在采取一些非常微薄的婴儿步骤,从 这个例子. 我修改了语法以创建以下测试 Nano.g4: 语法纳米 ..
发布时间:2021-11-11 04:10:08 其他开发

Antlr 4 解析大型 c 文件需要永远

我有一个大型 c 代码文件 (>9000 LoC) 并尝试使用以下语法解析它: https://github.com/antlr/grammars-v4/blob/master/c/C.g4 我等了一个多小时才中止.该机器是带有4GB内存的Core 2 Duo L9400.最大 java vm-heap-size 设置为 2GB.它不会产生任何解析错误,但它根本没有完成. 在做了 ..
发布时间:2021-11-11 04:10:06 其他开发

在 ANTLR 中规范化标记文本

ANTLR 有没有办法将某些标记标记为具有规范输出? 例如,给定语法(摘录) words : FOO BAR BAZFOO : [Ff] [Oo] [Oo]酒吧:[Bb] [Aa] [Rr]BAZ : [Bb] [Aa] [Zz]SP : [ ] ->频道(隐藏); words 将匹配“FOO BAR BAZ"、“foo bar baz"、“Foo bAr baZ"等 当我调用 T ..
发布时间:2021-11-11 04:10:00 其他开发

在 Antlr 中跳过不匹配的输入

有没有办法在语法中指定我想跳过所有与任何规则不匹配的输入(否则会引发识别错误)? 解决方案 是的.实现取决于您需要/想要跳过的位置. 在词法分析器中,最后一条规则如: 未知:.->跳过 ;//或 ->频道(隐藏); 将消耗任何其他不匹配的输入字符,但会阻止它们被解析器标记和考虑.您确实希望一次匹配一个字符,以便在每个输入文本索引处所有其他词法分析器规则都有机会首先匹配. 同 ..
发布时间:2021-11-11 04:09:57 其他开发

使用 Java 在 ANTLR4 中绘制解析树

我是 ANTLR4 的新手,当我第一次在命令行中尝试它时,我使用的是带有 gui 参数的 grun.现在我正在开发一个 Java 应用程序,我想在执行我的 Java 程序时显示相同的对话框. 我成功生成了 ParseTree,我可以浏览它.但我也想显示它.我认为它与 TreeViewer 类有关,但我不知道如何使用它. 谢谢 解决方案 TreeViewer 是一个 Swing ..
发布时间:2021-11-11 04:09:54 Java开发

用 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 其他开发

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

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

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

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

用于多语言生成的 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 其他开发

如何访问 antlr golang 目标中的语法组件

访问通过语法规则传递的运算符值时出现编译错误.例如,我有以下语法文件: 语法表达式;@parser::header {进口 (“操作系统")}@parser::members {func eval(left int, op antlr.Token, right int) int {如果(op.GetText()==“*"){返回左 * 右} else if (op.GetText() == "+ ..
发布时间:2021-11-11 04:08:35 其他开发

处理以空格开头的字符串

我正在尝试使用以下规则集创建 ANTLR v4 语法: 1.如果一行以@开头,就被认为是一个标签: @label 2.如果该行以cmd开头,则视为命令 cmd param1 param2 3.如果一行以空格开头,则视为字符串.应提取所有文本.字符串可以是多行的,所以它们以空行结束 支持多行的长字符串以及任何可以想象的特殊字符. 4.最后,如果一行以空格开头,@ ..
发布时间:2021-11-11 04:08:32 其他开发

Antlr 跳过标签外的文本

我试图跳过/忽略自定义标签外的文本: 此文本是要跳过的唯一标记 ?compo \5+5\ ?> 还有这个 我尝试使用以下词法分析器: TAG_OPEN : ''->流行模式;NUMBER_DIGIT : '1'..'9';零:'0';逻辑拷贝: 或者|和;比较: 情商|东北部|GT|通用电气|LT|乐;WS : ' ';换行:('\r\n'|'\n'|' ..
发布时间:2021-11-11 04:08:26 其他开发