如何将ANTLR语法文件拆分为多个

Nis*_*ddy 5 grammar parsing antlr4

我有一个大的语法文件,并计划将其拆分为多个文件,以便可以在另一个语法文件中重用一些较小的文件。我曾尝试这样做,但失败了。您能告诉我是否有这样的功能吗?如果有,请指导我举一个例子。

小智 5

如果要拆分词法分析器和解析器。

词法分析器:

lexer grammar HelloLexer;
Hello : 'hello' ;
ID : [a-z]+ ;             // match lower-case identifiers
WS : [ \t\r\n]+ -> skip ; // skip spaces, tabs, newlines
Run Code Online (Sandbox Code Playgroud)

解析器:

parser grammar HelloParser;
options { tokenVocab=HelloLexer; }
r  : Hello ID ;      
Run Code Online (Sandbox Code Playgroud)

请记住将文件命名为 HelloLexer.g4 和 HelloParser.g4

如果你想导入整个语法,那么你应该使用 import 关键字

grammar Hello;

import OtherGrammar;

Hello : 'hello' ;
ID : [a-z]+ ;             // match lower-case identifiers
WS : [ \t\r\n]+ -> skip ; // skip spaces, tabs, newlines    
r  : Hello ID ;
Run Code Online (Sandbox Code Playgroud)


use*_*638 4

您没有提到 ANTLR 版本,所以我假设您使用的是当前版本 - 4.x。\n在 ANTLR4 语法中可以使用import关键字导入。\n类似这样的内容:

\n\n

文件:CommonLexerRules.g4

\n\n
lexer grammar CommonLexerRules;\n\nID  :   [a-zA-Z]+ ;\n...\n
Run Code Online (Sandbox Code Playgroud)\n\n

文件:MyParser.g4

\n\n
grammar MyParser;      \nimport CommonLexerRules; //includes all rules from lexer CommonLexerRules.g4\n...\n
Run Code Online (Sandbox Code Playgroud)\n\n

\xe2\x80\x9cmain 语法\xe2\x80\x9d 中的规则会覆盖导入语法中的规则以实现继承。\n请在此处查看更多详细信息:https: //theantlrguy.atlassian.net/wiki/display/ANTLR4/Grammar+Structure #GrammarStructure-GrammarImports

\n