-
Notifications
You must be signed in to change notification settings - Fork 60
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Add support for "|" inside productions #100
Comments
Seems reasonable to me
בתאריך יום ג׳, 4 באוג׳ 2020, 16:45, מאת Philippe Laferrière <
notifications@github.com>:
… Cleans up the use case where one has many small productions. For example,
@pg.production("prod: TOKEN_1")
# ... <24 lines>
@pg.production("prod: TOKEN_26")
def func(p):
pass
Would be simplified to
@pg.production("prod: TOKEN_1 | ... | TOKEN_26")
def func(p):
pass
More specifically, I need this right now, as I need to accept (and
throwaway) all tokens until I see a newline.
I'd be happy to submit a PR if you guys think it's a valuable feature to
have.
—
You are receiving this because you are subscribed to this thread.
Reply to this email directly, view it on GitHub
<#100>, or unsubscribe
<https://github.com/notifications/unsubscribe-auth/AAAAGBHFK3T77XN5C6X72T3R7BXOXANCNFSM4PUZBPEQ>
.
|
We have a production rule |
Perhaps \ escapes it? If not then add a lexer rule to match | to VERTICLE_PIPE or similar and use that? @nobodxbodon |
@leocornelius thanks for the suggestion. Just tried this test case and it does seem to work: def test_arithmetic(self):
lg = LexerGenerator()
lg.add("NUMBER", r"\d+")
lg.add("BITOR", r"\|")
pg = ParserGenerator(["NUMBER", "BITOR"], precedence=[
("left", ["BITOR"]),
])
@pg.production("main : expr")
def main(p):
return p[0]
@pg.production("expr : expr BITOR expr")
def expr_binop(p):
return BoxInt(operator.or_(p[0].getint(), p[2].getint()))
@pg.production("expr : NUMBER")
def expr_num(p):
return BoxInt(int(p[0].getstr()))
lexer = lg.build()
parser = pg.build()
assert parser.parse(lexer.lex("1|8")) == BoxInt(9) |
See #101, it should now be fixed :) |
Cleans up the use case where one has many small productions. For example,
Would be simplified to
More specifically, I need this right now, as I need to accept (and throwaway) all tokens until I see a newline.
I'd be happy to submit a PR if you guys think it's a valuable feature to have.
The text was updated successfully, but these errors were encountered: