This commit is contained in:
2024-02-21 15:08:01 +01:00
parent b6949f6a73
commit b388a6a95c
11 changed files with 31 additions and 8 deletions

2
README.md Normal file
View File

@ -0,0 +1,2 @@
# PLTHY
The programming language that hates you.

Binary file not shown.

View File

@ -21,7 +21,7 @@
\textit{statement} & $\rightarrow$ & \textit{statement} \texttt{if} \textit{expression} \\ \hline
\textit{statement} & $\rightarrow$ & \textit{statement} \texttt{because} \textit{expression} \\ \hline
\textit{statement} & $\rightarrow$ & \texttt{until} \textit{expression} \textit{statement} \\ \hline
\textit{statement} & $\rightarrow$ & \textit{expression} \texttt{->} \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

View File

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

View File

@ -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"\["),

View File

@ -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:]))

View File

@ -1,4 +1,4 @@
hello|
set 2 -> x|
do print<variable x;>|
set 2 -> z|
do print<variable z;>|
goodbye|

View File

@ -1,3 +1,4 @@
7
5
5 6
15

View File

@ -5,4 +5,7 @@ set 5 -> y if variable x = 7|
do print<variable y;>|
set set 5 -> z + 1 -> a|
do print<variable z; variable a;>|
set 15 -> x if variable x+3>2*2+5|
set 1 -> x if variable x+3<2*2+5|
do print<variable x;>|
goodbye|

1
tests/16_E004.expected Normal file
View File

@ -0,0 +1 @@
E004: Random compiler error

4
tests/16_E004.plthy Normal file
View File

@ -0,0 +1,4 @@
hello|
set 2 -> x|
do print<variable x;>|
goodbye|