草庐IT

java - 如何在 ANTLR 3 中处理字符串文字中的转义序列?

我一直在查看ANTLRv3文档(以及我可信赖的“TheDefinitiveANTLRreference”副本),但我似乎找不到在字符串文字中实现转义序列的干净方法(我目前正在使用Java目标)。我曾希望能够做类似的事情:fragmentESCAPE_SEQUENCE:'\\''\''{setText("'");};STRING:'\''(ESCAPE_SEQUENCE|~('\''|'\\'))*'\''{//stripthequotesfromtheresultingtokensetText(getText().substring(1,getText().length()-1));}

c# - 在 C# 中行走 ANTLR AST 的教程?

有人知道在C#中使用ANTLR生成的AST的教程吗?我能找到的最接近的是this,但它并不是很有帮助。我的目标是遍历基于我正在研究的特定领域语言生成的树,并使用这些树来输出生成的C#代码。基于Java的教程也会很有帮助-任何提供如何遍历ANTLRAST的清晰示例的任何内容。 最佳答案 我设法通过修改ManuelAbadia'sarticle末尾的示例来解决这个问题.这是我的版本,我碰巧用它来将解析的代码转换为C#。这些是步骤:实例化ANTLRStringStream或使用您的输入进行子类化(可以是文件或字符串)。实例化您生成的词法分

c# - 在 C# 中行走 ANTLR AST 的教程?

有人知道在C#中使用ANTLR生成的AST的教程吗?我能找到的最接近的是this,但它并不是很有帮助。我的目标是遍历基于我正在研究的特定领域语言生成的树,并使用这些树来输出生成的C#代码。基于Java的教程也会很有帮助-任何提供如何遍历ANTLRAST的清晰示例的任何内容。 最佳答案 我设法通过修改ManuelAbadia'sarticle末尾的示例来解决这个问题.这是我的版本,我碰巧用它来将解析的代码转换为C#。这些是步骤:实例化ANTLRStringStream或使用您的输入进行子类化(可以是文件或字符串)。实例化您生成的词法分

java - ANTLR 4 $channel = HIDDEN 和选项

在决定从v3切换到v4后,我需要ANTLR4语法方面的帮助。我对ANTLR不是很有经验,所以如果我的问题很愚蠢,我真的很抱歉;)在v3中,我使用以下代码来检测Java样式的注释:COMMENT:'//'~('\n'|'\r')*'\r'?'\n'{$channel=HIDDEN;}|'/*'(options{greedy=false;}:.)*'*/'{$channel=HIDDEN;};在v4中没有特定于规则的选项。Action(移动到隐藏channel)也无效。谁能给我一个提示如何在ANTLRv4中做到这一点? 最佳答案 v4等

java - ANTLR 4 $channel = HIDDEN 和选项

在决定从v3切换到v4后,我需要ANTLR4语法方面的帮助。我对ANTLR不是很有经验,所以如果我的问题很愚蠢,我真的很抱歉;)在v3中,我使用以下代码来检测Java样式的注释:COMMENT:'//'~('\n'|'\r')*'\r'?'\n'{$channel=HIDDEN;}|'/*'(options{greedy=false;}:.)*'*/'{$channel=HIDDEN;};在v4中没有特定于规则的选项。Action(移动到隐藏channel)也无效。谁能给我一个提示如何在ANTLRv4中做到这一点? 最佳答案 v4等

java - 如何获取antlr4规则匹配的原文?

使用Java7语法https://github.com/antlr/grammars-v4/blob/master/java7/Java7.g4我想找到具有特定名称的方法,然后打印出该方法。我看到我可以在匹配时使用methodDeclaration规则。所以我继承了Java7BaseListener并覆盖了这个监听器方法:@OverridepublicvoidenterMethodDeclaration(Java7Parser.MethodDeclarationContextctx){}如何获取原始文本?ctx.getText()给了我一个去掉所有空格的字符串。我想要评论和原始格式。

java - 如何获取antlr4规则匹配的原文?

使用Java7语法https://github.com/antlr/grammars-v4/blob/master/java7/Java7.g4我想找到具有特定名称的方法,然后打印出该方法。我看到我可以在匹配时使用methodDeclaration规则。所以我继承了Java7BaseListener并覆盖了这个监听器方法:@OverridepublicvoidenterMethodDeclaration(Java7Parser.MethodDeclarationContextctx){}如何获取原始文本?ctx.getText()给了我一个去掉所有空格的字符串。我想要评论和原始格式。

java - 如何使用 ANTLR4 创建 AST?

我一直在搜索这方面的内容,但找不到任何真正帮助我构建AST的有用信息。我已经知道ANTLR4不像以前的ANTLR3那样构建AST。每个人都说:“嘿,使用访问者!”,但我找不到任何示例或更详细的解释来说明如何做到这一点......我有一个必须像C的语法,但每个命令都是用葡萄牙语(葡萄牙语编程语言)编写的。我可以使用ANTLR4轻松生成解析树。我的问题是:我现在需要做什么来创建AST?顺便说一句,我正在使用Java和IntelliJ...EDIT1:我能得到的最接近的是使用这个主题的答案:Isthereasimpleexampleofusingantlr4tocreateanASTfrom

java - 如何使用 ANTLR4 创建 AST?

我一直在搜索这方面的内容,但找不到任何真正帮助我构建AST的有用信息。我已经知道ANTLR4不像以前的ANTLR3那样构建AST。每个人都说:“嘿,使用访问者!”,但我找不到任何示例或更详细的解释来说明如何做到这一点......我有一个必须像C的语法,但每个命令都是用葡萄牙语(葡萄牙语编程语言)编写的。我可以使用ANTLR4轻松生成解析树。我的问题是:我现在需要做什么来创建AST?顺便说一句,我正在使用Java和IntelliJ...EDIT1:我能得到的最接近的是使用这个主题的答案:Isthereasimpleexampleofusingantlr4tocreateanASTfrom

java - 处理 ANTLR4 中的错误

解析器不知道该做什么时的默认行为是将消息打印到终端,例如:line1:23missingDECIMALat'}'这是一条好消息,但发错了地方。我宁愿将其视为异常(exception)。我尝试使用BailErrorStrategy,但这会引发ParseCancellationException没有消息(由InputMismatchException引起,也没有消息)。有没有办法让它通过异常报告错误,同时保留消息中的有用信息?这就是我真正追求的——我通常在规则中使用Action来构建一个对象:dataspecreturns[DataExtractorextractor]@init{Data