从 ANTLR 文法创建树
Creating a Tree from an ANTLR Grammar
我已经编写了一个 ANTLR 语法文件,现在我需要生成一个邻接矩阵来告诉我语法中的哪个规则与哪个规则相关联。
例如:-
开始:('show' | 'give' | 'get') 'me' ('all')?短语
| 'I' 'would' 'like' ('all')?短语
|短语;
短语:构造短语(('and')?构造短语)*
|构造短语 'and' ('its' | 'their') 构造短语
|构造短语函数短语
|功能短语
;
在这里我们有 I would like 相互关联..所以我需要读取语法文件并生成一个邻接矩阵。
解析 ANTLR 文法并不困难。我已将此作为 code completion implementation in MySQL Workbench.
的一部分
您需要 ANTLR 元语法并从中生成解析器。然后用它来将你自己的语法加载到一个结构中,你可以用它来生成矩阵。
作为开端,您可以使用 the ANTLR grammar parser I have created,但这是针对 C/C++ 目标,而不是 Java。因此,您必须从 ANTLR 主页获取 ANTLR3.g 文件并从中创建您自己的解析器。
我在 github https://github.com/julianthome/inmemantlr 上创建了一个项目,该项目采用 g4 语法定义和一个包含要解析的实际内容的文本文件。它会自动为您生成一个 AST,其中节点确实包含解析规则和与该规则关联的标记。它可能对您的目的有用。
它是用 Java 编写的——您可以插入任何您喜欢的 g4 文件……解析器生成和 AST 生成是自动完成的。代码示例可以在测试用例中找到。
最良好的祝愿和亲切的问候
朱利安
我已经编写了一个 ANTLR 语法文件,现在我需要生成一个邻接矩阵来告诉我语法中的哪个规则与哪个规则相关联。 例如:- 开始:('show' | 'give' | 'get') 'me' ('all')?短语 | 'I' 'would' 'like' ('all')?短语 |短语;
短语:构造短语(('and')?构造短语)* |构造短语 'and' ('its' | 'their') 构造短语 |构造短语函数短语 |功能短语 ;
在这里我们有 I would like 相互关联..所以我需要读取语法文件并生成一个邻接矩阵。
解析 ANTLR 文法并不困难。我已将此作为 code completion implementation in MySQL Workbench.
的一部分您需要 ANTLR 元语法并从中生成解析器。然后用它来将你自己的语法加载到一个结构中,你可以用它来生成矩阵。
作为开端,您可以使用 the ANTLR grammar parser I have created,但这是针对 C/C++ 目标,而不是 Java。因此,您必须从 ANTLR 主页获取 ANTLR3.g 文件并从中创建您自己的解析器。
我在 github https://github.com/julianthome/inmemantlr 上创建了一个项目,该项目采用 g4 语法定义和一个包含要解析的实际内容的文本文件。它会自动为您生成一个 AST,其中节点确实包含解析规则和与该规则关联的标记。它可能对您的目的有用。
它是用 Java 编写的——您可以插入任何您喜欢的 g4 文件……解析器生成和 AST 生成是自动完成的。代码示例可以在测试用例中找到。
最良好的祝愿和亲切的问候 朱利安