Actual strings and floats
Using the new regex features
This commit is contained in:
parent
c0b623bd6d
commit
30f7798719
1 changed files with 30 additions and 3 deletions
33
grammar.py
33
grammar.py
|
|
@ -12,7 +12,6 @@ from parser import (
|
||||||
Terminal,
|
Terminal,
|
||||||
Re,
|
Re,
|
||||||
)
|
)
|
||||||
from parser.parser import compile_lexer, dump_lexer_table
|
|
||||||
|
|
||||||
|
|
||||||
class FineGrammar(Grammar):
|
class FineGrammar(Grammar):
|
||||||
|
|
@ -356,7 +355,20 @@ class FineGrammar(Grammar):
|
||||||
RCURLY = Terminal("}")
|
RCURLY = Terminal("}")
|
||||||
RETURN = Terminal("return")
|
RETURN = Terminal("return")
|
||||||
SEMICOLON = Terminal(";")
|
SEMICOLON = Terminal(";")
|
||||||
STRING = Terminal('""') # TODO
|
STRING = Terminal(
|
||||||
|
# Double-quoted string.
|
||||||
|
Re.seq(
|
||||||
|
Re.literal('"'),
|
||||||
|
(~Re.set('"', "\\") | (Re.set("\\") + Re.any())).star(),
|
||||||
|
Re.literal('"'),
|
||||||
|
)
|
||||||
|
# Single-quoted string.
|
||||||
|
| Re.seq(
|
||||||
|
Re.literal("'"),
|
||||||
|
(~Re.set("'", "\\") | (Re.set("\\") + Re.any())).star(),
|
||||||
|
Re.literal("'"),
|
||||||
|
)
|
||||||
|
)
|
||||||
WHILE = Terminal("while")
|
WHILE = Terminal("while")
|
||||||
EQUAL = Terminal("=")
|
EQUAL = Terminal("=")
|
||||||
LPAREN = Terminal("(")
|
LPAREN = Terminal("(")
|
||||||
|
|
@ -376,7 +388,20 @@ class FineGrammar(Grammar):
|
||||||
MINUS = Terminal("-")
|
MINUS = Terminal("-")
|
||||||
STAR = Terminal("*")
|
STAR = Terminal("*")
|
||||||
SLASH = Terminal("/")
|
SLASH = Terminal("/")
|
||||||
NUMBER = Terminal(Re.set(("0", "9")).plus())
|
NUMBER = Terminal(
|
||||||
|
Re.seq(
|
||||||
|
Re.set(("0", "9")).plus(),
|
||||||
|
Re.seq(
|
||||||
|
Re.literal("."),
|
||||||
|
Re.set(("0", "9")),
|
||||||
|
Re.seq(
|
||||||
|
Re.set("e", "E"),
|
||||||
|
Re.set("+", "-").question(),
|
||||||
|
Re.set(("0", "9")).plus(),
|
||||||
|
).question(),
|
||||||
|
).question(),
|
||||||
|
)
|
||||||
|
)
|
||||||
TRUE = Terminal("true")
|
TRUE = Terminal("true")
|
||||||
FALSE = Terminal("false")
|
FALSE = Terminal("false")
|
||||||
BANG = Terminal("!")
|
BANG = Terminal("!")
|
||||||
|
|
@ -570,6 +595,8 @@ class FineTokens:
|
||||||
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
|
from parser.parser import compile_lexer, dump_lexer_table
|
||||||
|
|
||||||
grammar = FineGrammar()
|
grammar = FineGrammar()
|
||||||
grammar.build_table()
|
grammar.build_table()
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue