Actual strings and floats

Using the new regex features
This commit is contained in:
John Doty 2024-08-24 08:36:28 -07:00
parent c0b623bd6d
commit 30f7798719

View file

@ -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()