Antlr 数组帮助
嘿,我开始在 java 中使用 Antlr,我想知道如何将一些值直接存储到二维数组中并返回该数组?我根本找不到任何关于此的教程,感谢所有帮助。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
嘿,我开始在 java 中使用 Antlr,我想知道如何将一些值直接存储到二维数组中并返回该数组?我根本找不到任何关于此的教程,感谢所有帮助。
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
接受
或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
发布评论
评论(2)
假设您想要解析一个包含由空格分隔的数字的平面文本文件。您想将其解析为
int
的二维数组,其中每一行都是数组中的一个“行”。这种“语言”的 ANTLR 语法可能如下所示:
现在,您希望
parse
规则返回List< 的
List
/代码> 对象。通过添加returns [List
在您的> 来做到这一点number]
parse
规则之后,可以在@init{ ... }
块中初始化:您的
line
规则看起来有点相同,只是它返回一维数字列表:下一步是用正在解析的实际值填充
List
。这可以通过在line
Number+
循环内嵌入代码{$row.add(Integer.parseInt($Number.text));}
来完成。 /code> 规则:最后,您需要添加由
line
规则返回的List
,以实际添加到您的 2D数字parse
规则中的 code> 列表:下面是最终语法:
可以使用以下类进行测试:
现在从语法生成词法分析器和解析器:
编译所有
.java
源文件:并运行主类:
产生以下输出:
HTH
Let's say you want to parse a flat text file containing numbers separated by spaces. You'd like to parse this into a 2d array of
int
's where each line is a "row" in your array.The ANTLR grammar for such a "language" could look like:
Now, you'd like to have the
parse
rule return anList
ofList<Integer>
objects. Do that by adding areturns [List<List<Integer>> numbers]
after yourparse
rule which can be initialized in an@init{ ... }
block:Your
line
rule looks a bit the same, only it returns a 1 dimensional list of numbers:The next step is to fill the
List
s with the actual values that are being parsed. This can be done embedding the code{$row.add(Integer.parseInt($Number.text));}
inside theNumber+
loop in yourline
rule:And lastly, you'll want to add the
List
s being returned by yourline
rule to be actually added to your 2Dnumbers
list from yourparse
rule:Below is the final grammar:
which can be tested with the following class:
Now generate a lexer and parser from the grammar:
compile all
.java
source files:and run the main class:
which produces the following output:
HTH
以下是我编写的语法的一些摘录,该语法解析人名并返回
Name
对象。应该足以向您展示它是如何工作的。其他对象(例如数组)也以同样的方式完成。在语法中:
在常规 Java 代码中
Here's some excerpts from a grammar I made that parses people's names and returns a
Name
object. Should be enough to show you how it works. Other objects such as arrays are done the same way.In the grammar:
in your regular Java code