From b388a6a95cdec12177b6042d27a5837bbb5644f5 Mon Sep 17 00:00:00 2001 From: Nikolaj Gade Date: Wed, 21 Feb 2024 15:08:01 +0100 Subject: [PATCH] :sparkles: --- README.md | 2 ++ documentation/plthy.pdf | Bin 22305 -> 22313 bytes documentation/plthy.tex | 2 +- plthy_impl/ast_nodes.py | 4 ++-- plthy_impl/lexer.py | 3 +++ plthy_impl/parser.py | 15 ++++++++++++--- tests/02_variable.plthy | 4 ++-- tests/08_precedence.expected | 1 + tests/08_precedence.plthy | 3 +++ tests/16_E004.expected | 1 + tests/16_E004.plthy | 4 ++++ 11 files changed, 31 insertions(+), 8 deletions(-) create mode 100644 README.md create mode 100644 tests/16_E004.expected create mode 100644 tests/16_E004.plthy diff --git a/README.md b/README.md new file mode 100644 index 0000000..4dc3d15 --- /dev/null +++ b/README.md @@ -0,0 +1,2 @@ +# PLTHY +The programming language that hates you. \ No newline at end of file diff --git a/documentation/plthy.pdf b/documentation/plthy.pdf index e71e68befd97d8db081ee8b356e52c9783d52c60..2b51666ffd8c6a83be05f3f77008fa83801d6f99 100644 GIT binary patch delta 5479 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 Q6QQ605gQv+Q-SFJ0ph}R8vp= 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 aQjA9_QiFvQ12E?zlMp8d0-**P} \textbf{id} \\ \hline + \textit{statement} & $\rightarrow$ & \texttt{set} \textit{expression} \texttt{->} \textbf{id} \\ \hline \textit{statement} & $\rightarrow$ & \texttt{define} \textbf{function} \texttt{<} \textbf{int} \texttt{>} \texttt{as} \textit{statement} \\ \hline \textit{statement} & $\rightarrow$ & \texttt{return} \textit{expression} \\ \hline\hline \textit{command} & $\rightarrow$ & \textbf{builtin} \texttt{<} \textit{expressions} \texttt{>} \\ \hline diff --git a/plthy_impl/ast_nodes.py b/plthy_impl/ast_nodes.py index cbfa3d7..62abba8 100644 --- a/plthy_impl/ast_nodes.py +++ b/plthy_impl/ast_nodes.py @@ -50,7 +50,7 @@ class ExpVariable(Exp): self.variable_name = variable_id def __repr__(self) -> str: - return f"exp_variable({self.variable_name})" + return f"variable({self.variable_name})" def eval(self, vtable, ftable): return vtable, ftable, vtable[self.variable_name] @@ -369,7 +369,7 @@ class Program(BaseBox): def __init__(self, statements: list[Statement]) -> None: self.statements = statements random.seed(str(self)) - r = random.randint(1,20) + r = random.randint(1,10) if r == 1: print("E004: Random compiler error") exit() diff --git a/plthy_impl/lexer.py b/plthy_impl/lexer.py index d8bdd38..16c17b9 100644 --- a/plthy_impl/lexer.py +++ b/plthy_impl/lexer.py @@ -32,7 +32,10 @@ DATA_TOKENS = [ ] SYMBOL_TOKENS = [ + ("SYMBOL_OR", r"\\\/"), + ("SYMBOL_AND", r"\/\\"), ("SYMBOL_SET", r"\-\>"), + ("SYMBOL_TILDE", r"\~"), # ("SYMBOL_LPARENS", r"\("), # ("SYMBOL_RPARENS", r"\)"), ("SYMBOL_LBRACKET", r"\["), diff --git a/plthy_impl/parser.py b/plthy_impl/parser.py index c48ef8f..a5f6cc2 100644 --- a/plthy_impl/parser.py +++ b/plthy_impl/parser.py @@ -11,9 +11,9 @@ class Parser(): ('left', ["KEYWORD_MAYBE", "KEYWORD_RETURN"]), ('left', ["KEYWORD_IF", "KEYWORD_BECAUSE", "KEYWORD_UNTIL", "KEYWORD_DEFINE", "KEYWORD_AS"]), ('left', ["KEYWORD_DO", "BUILTIN", "SYMBOL_SET"]), - ('left', ["SYMBOL_EQUALS"]), - ('left', ["SYMBOL_PLUS", "SYMBOL_MINUS"]), - ('left', ["SYMBOL_TIMES", "SYMBOL_DIVIDE", "SYMBOL_LT","SYMBOL_GT"]) + ('left', ["SYMBOL_EQUALS", "SYMBOL_LT","SYMBOL_GT"]), + ('left', ["SYMBOL_PLUS", "SYMBOL_MINUS", "SYMBOL_OR", "SYMBOL_AND"]), + ('left', ["SYMBOL_TIMES", "SYMBOL_DIVIDE", "SYMBOL_TILDE"]) ] ) @@ -118,6 +118,15 @@ class Parser(): def exp_a_binop(tokens): return ast_nodes.ExpABinop(tokens[1].value,tokens[0],tokens[2]) + @self.pg.production('expression : expression SYMBOL_OR expression') + @self.pg.production('expression : expression SYMBOL_AND expression') + def exp_b_binop(tokens): + pass + + @self.pg.production('expression : SYMBOL_TILDE expression') + def exp_not(tokens): + pass + @self.pg.production('expression : KEYWORD_ARGUMENT ARG') def exp_arg(tokens): return ast_nodes.ExpArg(int(tokens[1].value[1:])) diff --git a/tests/02_variable.plthy b/tests/02_variable.plthy index fb6fe5b..7e546fe 100644 --- a/tests/02_variable.plthy +++ b/tests/02_variable.plthy @@ -1,4 +1,4 @@ hello| -set 2 -> x| -do print| +set 2 -> z| +do print| goodbye| \ No newline at end of file diff --git a/tests/08_precedence.expected b/tests/08_precedence.expected index b7dfd93..a326b49 100644 --- a/tests/08_precedence.expected +++ b/tests/08_precedence.expected @@ -1,3 +1,4 @@ 7 5 5 6 +15 diff --git a/tests/08_precedence.plthy b/tests/08_precedence.plthy index 1fb801c..d700bc2 100644 --- a/tests/08_precedence.plthy +++ b/tests/08_precedence.plthy @@ -5,4 +5,7 @@ set 5 -> y if variable x = 7| do print| set set 5 -> z + 1 -> a| do print| +set 15 -> x if variable x+3>2*2+5| +set 1 -> x if variable x+3<2*2+5| +do print| goodbye| \ No newline at end of file diff --git a/tests/16_E004.expected b/tests/16_E004.expected new file mode 100644 index 0000000..9032d21 --- /dev/null +++ b/tests/16_E004.expected @@ -0,0 +1 @@ +E004: Random compiler error diff --git a/tests/16_E004.plthy b/tests/16_E004.plthy new file mode 100644 index 0000000..fb6fe5b --- /dev/null +++ b/tests/16_E004.plthy @@ -0,0 +1,4 @@ +hello| +set 2 -> x| +do print| +goodbye| \ No newline at end of file