How to split ANTLR4 parser grammar into separate files when there are cyclic references?

Multi tool use
up vote
0
down vote
favorite
I am trying to make a language which grammar has cyclic references in parsing rules, like this:
statement : 'return' expression ';' ;
expression : ID | lambda ;
lambda : 'func' '{' statement '}' ;
It works when everything is in a single file, but I want to place everything about expressions in file Expressions.g4, statements in Statements.g4, and so on. When I split this grammar and add import
directives where needed, ANTLR complains about reference to undefined rule.
Of course, implicit tokens like ';'
are replaced by explicit after separating lexer and parser grammars, they are here to make this example clear.
antlr4
New contributor
trollingchar is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.
add a comment |
up vote
0
down vote
favorite
I am trying to make a language which grammar has cyclic references in parsing rules, like this:
statement : 'return' expression ';' ;
expression : ID | lambda ;
lambda : 'func' '{' statement '}' ;
It works when everything is in a single file, but I want to place everything about expressions in file Expressions.g4, statements in Statements.g4, and so on. When I split this grammar and add import
directives where needed, ANTLR complains about reference to undefined rule.
Of course, implicit tokens like ';'
are replaced by explicit after separating lexer and parser grammars, they are here to make this example clear.
antlr4
New contributor
trollingchar is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.
add a comment |
up vote
0
down vote
favorite
up vote
0
down vote
favorite
I am trying to make a language which grammar has cyclic references in parsing rules, like this:
statement : 'return' expression ';' ;
expression : ID | lambda ;
lambda : 'func' '{' statement '}' ;
It works when everything is in a single file, but I want to place everything about expressions in file Expressions.g4, statements in Statements.g4, and so on. When I split this grammar and add import
directives where needed, ANTLR complains about reference to undefined rule.
Of course, implicit tokens like ';'
are replaced by explicit after separating lexer and parser grammars, they are here to make this example clear.
antlr4
New contributor
trollingchar is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.
I am trying to make a language which grammar has cyclic references in parsing rules, like this:
statement : 'return' expression ';' ;
expression : ID | lambda ;
lambda : 'func' '{' statement '}' ;
It works when everything is in a single file, but I want to place everything about expressions in file Expressions.g4, statements in Statements.g4, and so on. When I split this grammar and add import
directives where needed, ANTLR complains about reference to undefined rule.
Of course, implicit tokens like ';'
are replaced by explicit after separating lexer and parser grammars, they are here to make this example clear.
antlr4
antlr4
New contributor
trollingchar is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.
New contributor
trollingchar is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.
New contributor
trollingchar is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.
asked 2 days ago


trollingchar
312
312
New contributor
trollingchar is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.
New contributor
trollingchar is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.
trollingchar is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.
add a comment |
add a comment |
active
oldest
votes
active
oldest
votes
active
oldest
votes
active
oldest
votes
active
oldest
votes
trollingchar is a new contributor. Be nice, and check out our Code of Conduct.
trollingchar is a new contributor. Be nice, and check out our Code of Conduct.
trollingchar is a new contributor. Be nice, and check out our Code of Conduct.
trollingchar is a new contributor. Be nice, and check out our Code of Conduct.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53350339%2fhow-to-split-antlr4-parser-grammar-into-separate-files-when-there-are-cyclic-ref%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
xY,A3BA2PF70,5SJGXQ 0j2DOkaNXBhGLGOs7dXwUzA