ANTLR4 + Python - how to access fragment tokens (sub tokens) from the listener?
How can I access the token MONTH_NAME
or DIGITS
from the listener using the following grammar:
date : DATE_BULK;
DATE_BULK : DIGITS SEPARATOR DIGITS SEPARATOR DIGITS
| DIGITS WHITE_SPACE MONTH_NAME WHITE_SPACE DIGITS ;
fragment MONTH_NAME : 'Jan' |
'Feb' |
;
In the listener I can do:
def exitDate(self, ctx):
dateBulk = ctx.DATE_BULK().getText()
But this gives the whole date which I then have to parse manually using regular expression or other methods.
- P.S.: I can't get rid of the dummy
DATE_BULK
and definedate
using the rules directly due to structure constraints in my overall grammar which is kinda complex.
python parsing antlr4
add a comment |
How can I access the token MONTH_NAME
or DIGITS
from the listener using the following grammar:
date : DATE_BULK;
DATE_BULK : DIGITS SEPARATOR DIGITS SEPARATOR DIGITS
| DIGITS WHITE_SPACE MONTH_NAME WHITE_SPACE DIGITS ;
fragment MONTH_NAME : 'Jan' |
'Feb' |
;
In the listener I can do:
def exitDate(self, ctx):
dateBulk = ctx.DATE_BULK().getText()
But this gives the whole date which I then have to parse manually using regular expression or other methods.
- P.S.: I can't get rid of the dummy
DATE_BULK
and definedate
using the rules directly due to structure constraints in my overall grammar which is kinda complex.
python parsing antlr4
Could be handled using a lexermode
if there is sufficient structure to define the guards. Within the mode, assign alternate token types to the elements of what would be aDATE_BULK
. Will effectively widen the set of tokens being emitted and allow the parserdate
rule to be defined against the component elements.
– GRosenberg
Nov 21 '18 at 4:50
add a comment |
How can I access the token MONTH_NAME
or DIGITS
from the listener using the following grammar:
date : DATE_BULK;
DATE_BULK : DIGITS SEPARATOR DIGITS SEPARATOR DIGITS
| DIGITS WHITE_SPACE MONTH_NAME WHITE_SPACE DIGITS ;
fragment MONTH_NAME : 'Jan' |
'Feb' |
;
In the listener I can do:
def exitDate(self, ctx):
dateBulk = ctx.DATE_BULK().getText()
But this gives the whole date which I then have to parse manually using regular expression or other methods.
- P.S.: I can't get rid of the dummy
DATE_BULK
and definedate
using the rules directly due to structure constraints in my overall grammar which is kinda complex.
python parsing antlr4
How can I access the token MONTH_NAME
or DIGITS
from the listener using the following grammar:
date : DATE_BULK;
DATE_BULK : DIGITS SEPARATOR DIGITS SEPARATOR DIGITS
| DIGITS WHITE_SPACE MONTH_NAME WHITE_SPACE DIGITS ;
fragment MONTH_NAME : 'Jan' |
'Feb' |
;
In the listener I can do:
def exitDate(self, ctx):
dateBulk = ctx.DATE_BULK().getText()
But this gives the whole date which I then have to parse manually using regular expression or other methods.
- P.S.: I can't get rid of the dummy
DATE_BULK
and definedate
using the rules directly due to structure constraints in my overall grammar which is kinda complex.
python parsing antlr4
python parsing antlr4
asked Nov 20 '18 at 13:48
A_MatarA_Matar
6981932
6981932
Could be handled using a lexermode
if there is sufficient structure to define the guards. Within the mode, assign alternate token types to the elements of what would be aDATE_BULK
. Will effectively widen the set of tokens being emitted and allow the parserdate
rule to be defined against the component elements.
– GRosenberg
Nov 21 '18 at 4:50
add a comment |
Could be handled using a lexermode
if there is sufficient structure to define the guards. Within the mode, assign alternate token types to the elements of what would be aDATE_BULK
. Will effectively widen the set of tokens being emitted and allow the parserdate
rule to be defined against the component elements.
– GRosenberg
Nov 21 '18 at 4:50
Could be handled using a lexer
mode
if there is sufficient structure to define the guards. Within the mode, assign alternate token types to the elements of what would be a DATE_BULK
. Will effectively widen the set of tokens being emitted and allow the parser date
rule to be defined against the component elements.– GRosenberg
Nov 21 '18 at 4:50
Could be handled using a lexer
mode
if there is sufficient structure to define the guards. Within the mode, assign alternate token types to the elements of what would be a DATE_BULK
. Will effectively widen the set of tokens being emitted and allow the parser date
rule to be defined against the component elements.– GRosenberg
Nov 21 '18 at 4:50
add a comment |
1 Answer
1
active
oldest
votes
I can't get rid of the dummy
DATE_BULK
and definedate
using the rules [...]
Then the answer is simple: you can't. DATE_BULK
is one token and can't be separated in your parser (other than using Python's substring-functions, of course).
add a comment |
Your Answer
StackExchange.ifUsing("editor", function () {
StackExchange.using("externalEditor", function () {
StackExchange.using("snippets", function () {
StackExchange.snippets.init();
});
});
}, "code-snippets");
StackExchange.ready(function() {
var channelOptions = {
tags: "".split(" "),
id: "1"
};
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function() {
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled) {
StackExchange.using("snippets", function() {
createEditor();
});
}
else {
createEditor();
}
});
function createEditor() {
StackExchange.prepareEditor({
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
bindNavPrevention: true,
postfix: "",
imageUploader: {
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
},
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
});
}
});
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%2f53394476%2fantlr4-python-how-to-access-fragment-tokens-sub-tokens-from-the-listener%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
1 Answer
1
active
oldest
votes
1 Answer
1
active
oldest
votes
active
oldest
votes
active
oldest
votes
I can't get rid of the dummy
DATE_BULK
and definedate
using the rules [...]
Then the answer is simple: you can't. DATE_BULK
is one token and can't be separated in your parser (other than using Python's substring-functions, of course).
add a comment |
I can't get rid of the dummy
DATE_BULK
and definedate
using the rules [...]
Then the answer is simple: you can't. DATE_BULK
is one token and can't be separated in your parser (other than using Python's substring-functions, of course).
add a comment |
I can't get rid of the dummy
DATE_BULK
and definedate
using the rules [...]
Then the answer is simple: you can't. DATE_BULK
is one token and can't be separated in your parser (other than using Python's substring-functions, of course).
I can't get rid of the dummy
DATE_BULK
and definedate
using the rules [...]
Then the answer is simple: you can't. DATE_BULK
is one token and can't be separated in your parser (other than using Python's substring-functions, of course).
answered Nov 20 '18 at 14:26
Bart KiersBart Kiers
132k28244248
132k28244248
add a comment |
add a comment |
Thanks for contributing an answer to Stack Overflow!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
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%2f53394476%2fantlr4-python-how-to-access-fragment-tokens-sub-tokens-from-the-listener%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
Could be handled using a lexer
mode
if there is sufficient structure to define the guards. Within the mode, assign alternate token types to the elements of what would be aDATE_BULK
. Will effectively widen the set of tokens being emitted and allow the parserdate
rule to be defined against the component elements.– GRosenberg
Nov 21 '18 at 4:50