antlr相关内容

表达式的 ANTLR 语法

我正在尝试实现表达式处理语法(处理嵌套括号和其他内容).到目前为止,我有以下内容,但他们无法处理某些情况(成功/失败的情况出现在以下代码块之后).有人知道是怎么回事吗? 注意:varname += 和 varname = 只是 XText 中一些额外的 AST 生成助手.暂时不用担心他们. ...NilExpression 返回表达式:'零';FalseExpression 返回表达式:' ..
发布时间:2021-11-26 17:44:12 其他开发

antlr 为 c 生成 ast 并解析 ast

我正在对c程序做静态分析.我在antlr网站上搜索,似乎没有合适的语法文件可以为c程序生成ast.是不是意味着我必须从一开始就自己做.或者是有一个更快的方法.我还需要一个可以遍历解析器创建的 ast 的树解析器. 解决方案 您表示要进行静态分析以检测缓冲区溢出. 首先,为 C 编写语法比看起来更难.标准中有所有这些东西,然后才是真正的编译器实际接受的东西.你必须决定如何处理预处理器( ..
发布时间:2021-11-26 17:43:37 其他开发

在 antlr4 中构建 AST

我想知道我们是否可以使用 Antlr 版本 4 构建 AST.我找不到关于使用 antlr4 构建它的任何参考.一个 SO 答案说使用仅生成解析树的 antlr4 会很容易,但我的问题是效率怎么样? 它迫使我们爬取整个解析树而不是抽象语法树,这不是遍历整个树并使用访问者执行任务的有效方法. 解决方案 我想首先指出两个关键事项: 效率不仅仅是简单的执行速度.它还可以应用于内存开销 ..
发布时间:2021-11-26 17:43:07 其他开发

ANTLR 的 Java 树解析器输出

我在 ANTLR 网站上找到了一个示例模板,它是 Javatreeparser.g,该网站说它可以生成我需要的 AST,但是由于我是 ANTLR 的新手,我该如何让它显示出来?到目前为止,我所做的是将语法文件与我现有的 java 语法放在一起.但我不知道如何使用和输出文件中我需要的 AST.我该怎么做? 解决方案 我在 ANTLR 网站上找到了一个示例模板,它是 Javatreepar ..
发布时间:2021-11-26 17:39:39 Java开发

如何输出使用ANTLR构建的AST?

我正在为 C 制作一个静态分析器.我已经使用 ANTLR 完成了词法分析器和解析器,其中生成了 Java 代码. ANTLR 是否通过 options {output=AST;} 自动为我们构建 AST?还是我必须自己做树?如果是,那么如何吐出该 AST 上的节点? 我目前认为该 AST 上的节点将用于制作 SSA,然后进行数据流分析以制作静态分析器.我在正确的道路上吗? 解决方 ..
发布时间:2021-11-26 17:37:16 其他开发

如何使用 ANTLR4 创建 AST?

我一直在搜索有关此内容的大量内容,但找不到任何真正可以帮助我构建 AST 的有用信息.我已经知道 ANTLR4 不像以前的 ANTLR3 那样构建 AST.每个人都说:“嘿,使用访问者!",但我找不到任何示例或更详细的说明来说明如何执行此操作... 我的语法必须像 C,但每个命令都是用葡萄牙语(葡萄牙语编程语言)编写的.我可以使用 ANTLR4 轻松生成解析树.我的问题是:我现在需要做什么来 ..

ANTLR 中的 if/else 语句使用监听器

我正在为学校项目创建一种简单的编程语言.我正在使用 ANTLR 4 从我的语法中生成一个词法分析器和一个解析器.到目前为止,我一直在使用 ANTLR 的侦听器模式来应用编程语言的实际功能. 现在我想实现 if/else 语句,但我不确定在使用侦听器模式时是否可以实现这些语句,因为 ANTLR 决定在使用侦听器时以何种顺序遍历解析树,我想实现的 if/else 语句将需要根据语句中的哪个条件被 ..
发布时间:2021-11-25 16:05:28 Java开发

如何使用 ANTLR4 创建 AST?

我一直在搜索有关此内容的大量内容,但找不到任何真正可以帮助我构建 AST 的有用信息.我已经知道 ANTLR4 不像以前的 ANTLR3 那样构建 AST.每个人都说:“嘿,使用访问者!",但我找不到任何示例或更详细的说明来说明如何执行此操作... 我的语法必须像 C,但每个命令都是用葡萄牙语(葡萄牙语编程语言)编写的.我可以使用 ANTLR4 轻松生成解析树.我的问题是:我现在需要做什么来 ..

ANTLR:有简单的例子吗?

我想开始使用 ANTLR,但在花了几个小时查看 antlr.org 站点,我仍然无法清楚地了解 Java 过程的语法. 有没有一些简单的例子,比如用 ANTLR 实现的四运算计算器,通过解析器定义,一直到 Java 源代码? 解决方案 注意:此答案适用于 ANTLR3!如果您正在寻找 ANTLR4 示例,那么这个 Q&A 演示了如何使用 ANTLR4 创建简单的表达式解析器和评估器. ..
发布时间:2021-11-25 13:25:37 Java开发

关于在 Flash Builder 4.5.1 中使用 ANTLR v3 生成的文件的提示

根据这些说明,我正在尝试使用 ANTLR 生成的 *.as 文件在当前 Flash Builder 4.5.1 项目中. 因此,我将这个 ANTLR 的 Actionscript 运行时添加到我的项目中 - 没有问题. 我使用 ANTLRWorks 编译词法分析器/解析器规范也没有问题. 我在源 *.g 文件中添加了语言选项,以使 ANTLR 生成 Actionscript 源: ..
发布时间:2021-11-12 00:03:08 其他开发

存在相似模式时,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开发

如何根据语法拆分输入

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

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开发

匹配错误规则

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