✨
This commit is contained in:
Binary file not shown.
@ -21,7 +21,7 @@
|
|||||||
\textit{statement} & $\rightarrow$ & \textit{statement} \texttt{if} \textit{expression} \\ \hline
|
\textit{statement} & $\rightarrow$ & \textit{statement} \texttt{if} \textit{expression} \\ \hline
|
||||||
\textit{statement} & $\rightarrow$ & \textit{statement} \texttt{because} \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$ & \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{define} \textbf{function} \texttt{<} \textbf{int} \texttt{>} \texttt{as} \textit{statement} \\ \hline
|
||||||
\textit{statement} & $\rightarrow$ & \texttt{return} \textit{expression} \\ \hline\hline
|
\textit{statement} & $\rightarrow$ & \texttt{return} \textit{expression} \\ \hline\hline
|
||||||
\textit{command} & $\rightarrow$ & \textbf{builtin} \texttt{<} \textit{expressions} \texttt{>} \\ \hline
|
\textit{command} & $\rightarrow$ & \textbf{builtin} \texttt{<} \textit{expressions} \texttt{>} \\ \hline
|
||||||
|
@ -50,7 +50,7 @@ class ExpVariable(Exp):
|
|||||||
self.variable_name = variable_id
|
self.variable_name = variable_id
|
||||||
|
|
||||||
def __repr__(self) -> str:
|
def __repr__(self) -> str:
|
||||||
return f"exp_variable({self.variable_name})"
|
return f"variable({self.variable_name})"
|
||||||
|
|
||||||
def eval(self, vtable, ftable):
|
def eval(self, vtable, ftable):
|
||||||
return vtable, ftable, vtable[self.variable_name]
|
return vtable, ftable, vtable[self.variable_name]
|
||||||
@ -369,7 +369,7 @@ class Program(BaseBox):
|
|||||||
def __init__(self, statements: list[Statement]) -> None:
|
def __init__(self, statements: list[Statement]) -> None:
|
||||||
self.statements = statements
|
self.statements = statements
|
||||||
random.seed(str(self))
|
random.seed(str(self))
|
||||||
r = random.randint(1,20)
|
r = random.randint(1,10)
|
||||||
if r == 1:
|
if r == 1:
|
||||||
print("E004: Random compiler error")
|
print("E004: Random compiler error")
|
||||||
exit()
|
exit()
|
||||||
|
@ -32,7 +32,10 @@ DATA_TOKENS = [
|
|||||||
]
|
]
|
||||||
|
|
||||||
SYMBOL_TOKENS = [
|
SYMBOL_TOKENS = [
|
||||||
|
("SYMBOL_OR", r"\\\/"),
|
||||||
|
("SYMBOL_AND", r"\/\\"),
|
||||||
("SYMBOL_SET", r"\-\>"),
|
("SYMBOL_SET", r"\-\>"),
|
||||||
|
("SYMBOL_TILDE", r"\~"),
|
||||||
# ("SYMBOL_LPARENS", r"\("),
|
# ("SYMBOL_LPARENS", r"\("),
|
||||||
# ("SYMBOL_RPARENS", r"\)"),
|
# ("SYMBOL_RPARENS", r"\)"),
|
||||||
("SYMBOL_LBRACKET", r"\["),
|
("SYMBOL_LBRACKET", r"\["),
|
||||||
|
@ -11,9 +11,9 @@ class Parser():
|
|||||||
('left', ["KEYWORD_MAYBE", "KEYWORD_RETURN"]),
|
('left', ["KEYWORD_MAYBE", "KEYWORD_RETURN"]),
|
||||||
('left', ["KEYWORD_IF", "KEYWORD_BECAUSE", "KEYWORD_UNTIL", "KEYWORD_DEFINE", "KEYWORD_AS"]),
|
('left', ["KEYWORD_IF", "KEYWORD_BECAUSE", "KEYWORD_UNTIL", "KEYWORD_DEFINE", "KEYWORD_AS"]),
|
||||||
('left', ["KEYWORD_DO", "BUILTIN", "SYMBOL_SET"]),
|
('left', ["KEYWORD_DO", "BUILTIN", "SYMBOL_SET"]),
|
||||||
('left', ["SYMBOL_EQUALS"]),
|
('left', ["SYMBOL_EQUALS", "SYMBOL_LT","SYMBOL_GT"]),
|
||||||
('left', ["SYMBOL_PLUS", "SYMBOL_MINUS"]),
|
('left', ["SYMBOL_PLUS", "SYMBOL_MINUS", "SYMBOL_OR", "SYMBOL_AND"]),
|
||||||
('left', ["SYMBOL_TIMES", "SYMBOL_DIVIDE", "SYMBOL_LT","SYMBOL_GT"])
|
('left', ["SYMBOL_TIMES", "SYMBOL_DIVIDE", "SYMBOL_TILDE"])
|
||||||
]
|
]
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -118,6 +118,15 @@ class Parser():
|
|||||||
def exp_a_binop(tokens):
|
def exp_a_binop(tokens):
|
||||||
return ast_nodes.ExpABinop(tokens[1].value,tokens[0],tokens[2])
|
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')
|
@self.pg.production('expression : KEYWORD_ARGUMENT ARG')
|
||||||
def exp_arg(tokens):
|
def exp_arg(tokens):
|
||||||
return ast_nodes.ExpArg(int(tokens[1].value[1:]))
|
return ast_nodes.ExpArg(int(tokens[1].value[1:]))
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
hello|
|
hello|
|
||||||
set 2 -> x|
|
set 2 -> z|
|
||||||
do print<variable x;>|
|
do print<variable z;>|
|
||||||
goodbye|
|
goodbye|
|
@ -1,3 +1,4 @@
|
|||||||
7
|
7
|
||||||
5
|
5
|
||||||
5 6
|
5 6
|
||||||
|
15
|
||||||
|
@ -5,4 +5,7 @@ set 5 -> y if variable x = 7|
|
|||||||
do print<variable y;>|
|
do print<variable y;>|
|
||||||
set set 5 -> z + 1 -> a|
|
set set 5 -> z + 1 -> a|
|
||||||
do print<variable z; variable 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|
|
goodbye|
|
1
tests/16_E004.expected
Normal file
1
tests/16_E004.expected
Normal file
@ -0,0 +1 @@
|
|||||||
|
E004: Random compiler error
|
4
tests/16_E004.plthy
Normal file
4
tests/16_E004.plthy
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
hello|
|
||||||
|
set 2 -> x|
|
||||||
|
do print<variable x;>|
|
||||||
|
goodbye|
|
Reference in New Issue
Block a user