From 88644a95dffc8d20fcee6e06b8faccfbc0bada92 Mon Sep 17 00:00:00 2001 From: Ed94 Date: Sun, 24 Jul 2022 10:33:26 -0400 Subject: [PATCH] EOI: Lecture 13 complete --- App/EoI/Scripts/Eva.gd | 13 +++++++++---- App/EoI/Scripts/Lexer.gd | 6 ++++-- App/EoI/Scripts/Parser.gd | 10 ++++++++++ 3 files changed, 23 insertions(+), 6 deletions(-) diff --git a/App/EoI/Scripts/Eva.gd b/App/EoI/Scripts/Eva.gd index 67efb97..dae36a4 100644 --- a/App/EoI/Scripts/Eva.gd +++ b/App/EoI/Scripts/Eva.gd @@ -136,6 +136,11 @@ func eval( ast ): NType.op_LesserEqual: return eval( ast.arg(1) ) <= eval( ast.arg(2) ) + NType.op_Equal: + return eval( ast.arg(1) ) == eval( ast.arg(2) ) + NType.op_NotEqual: + return eval( ast.arg(1) ) != eval( ast.arg(2) ) + NType.fn_Print : return eval_Print( ast ) @@ -226,10 +231,10 @@ func eval_Numeric( ast ): return result if ast.type() == NType.op_Sub: - if ast.num_args() == 2: + if ast.num_args() < 2: return -eval( ast.arg(1) ) - var result = 0.0; var index = 1 + var result = eval( ast.arg(1) ); var index = 2 while index <= ast.num_args(): result -= eval( ast.arg(index) ) @@ -247,11 +252,11 @@ func eval_Numeric( ast ): return result if ast.type() == NType.op_Div: - var result = 1.0; var index = 1 + var result = eval( ast.arg(1) ); var index = 2 while index <= ast.num_args(): result /= eval( ast.arg(index) ) - result += 1 + index += 1 return result diff --git a/App/EoI/Scripts/Lexer.gd b/App/EoI/Scripts/Lexer.gd index 54f0601..4745ce2 100644 --- a/App/EoI/Scripts/Lexer.gd +++ b/App/EoI/Scripts/Lexer.gd @@ -37,8 +37,9 @@ const TType : Dictionary = \ literal_String = "Literal: String", op_Assgin = "Assignment", - op_Numeric = "op_Numeric", - op_Relational = "op_Relational", + op_Numeric = "Numeric Operation", + op_Relational = "Relational Operation", + op_Equality = "Equality Operation", fn_Print = "Print", @@ -72,6 +73,7 @@ const Spec : Dictionary = \ TType.op_Assgin : "start \"set\"", TType.op_Numeric : "start set(+ \\- * /)", TType.op_Relational : "start set(> <) =.repeat(0-1)", + TType.op_Equality : "start \\!.repeat(0-1) =", TType.fn_Print : "start \"print\"", diff --git a/App/EoI/Scripts/Parser.gd b/App/EoI/Scripts/Parser.gd index 860101f..0d12193 100644 --- a/App/EoI/Scripts/Parser.gd +++ b/App/EoI/Scripts/Parser.gd @@ -43,6 +43,8 @@ const NType = \ op_GreaterEqual = ">=", op_Lesser = "<", op_LesserEqual = "<=", + op_Equal = "=", + op_NotEqual = "!=", fn_Print = "Print", fn_User = "User Function", @@ -190,6 +192,14 @@ func parse_Expression(): node = parse_op_Numeric() TType.op_Relational: node = parse_op_Relational() + TType.op_Equality: + node = ASTNode.new() + match NextToken.Value: + NType.op_Equal: + node.set_Type(NType.op_Equal) + NType.op_NotEqual: + node.set_Type(NType.op_NotEqual) + eat(TType.op_Equality) TType.identifier: node = parse_op_Fn() TType.def_Start: