From 34184f2f890c9b4371a1b905d59ab411ac64a104 Mon Sep 17 00:00:00 2001 From: Daniel Grigsby Date: Wed, 7 Mar 2018 14:34:37 -0500 Subject: [PATCH] Test adam's working code --- Custom_Tests/test07.java | 7 +++++++ interpreter.scm | 2 +- state-manipulation.scm | 26 +++++++++++++++++++------- 3 files changed, 27 insertions(+), 8 deletions(-) create mode 100644 Custom_Tests/test07.java diff --git a/Custom_Tests/test07.java b/Custom_Tests/test07.java new file mode 100644 index 0000000..aff44ab --- /dev/null +++ b/Custom_Tests/test07.java @@ -0,0 +1,7 @@ +var x = 10; +{ + var y = 2; + var z = x * y; + x = z; +} +return x; diff --git a/interpreter.scm b/interpreter.scm index 28e590f..e63c6b5 100644 --- a/interpreter.scm +++ b/interpreter.scm @@ -29,7 +29,7 @@ ; All errors, despite their text, return 'error for test purposes (define error->handler (lambda (exception) ; It is correct to not delete the lambda to abstract this out. [exn:fail? error->handler] relies on this format. - 'error)) + exception)) ; Important section helper functions for abstraction are defined below diff --git a/state-manipulation.scm b/state-manipulation.scm index 77d8219..b115c35 100644 --- a/state-manipulation.scm +++ b/state-manipulation.scm @@ -46,6 +46,11 @@ ((eq? 'var (get-upcoming-statement-name arglist)) (cons nullreturn (list (G-evaluate-var-declare-statement->state arglist state)))) ((eq? 'while (get-upcoming-statement-name arglist)) (G-evaluate-while-statement->retval_state arglist state nullreturn)) ((eq? 'if (get-upcoming-statement-name arglist)) (G-evaluate-if-statement->retval_state arglist state)) + ;((eq? 'begin (get-upcoming-statement-name arglist)) (G-evaluate-block-statement->retval_state arglist state)) + ((eq? 'begin (get-upcoming-statement-name arglist)) + (list + (get-value-from-pair (evaluate-parse-tree->retval_state (cdr arglist) (G-add-scope-to-state->state state))) + (get-tail-scope (get-state-from-pair (evaluate-parse-tree->retval_state (cdr arglist) (G-add-scope-to-state->state state)))))) (else (cons nullreturn (list (get-state-from-pair (G-eval-atomic-statement->value_state arglist state)))))))) ; Important section helper functions for abstraction are defined below @@ -60,6 +65,20 @@ +; Evaluate Block section + +(define G-evaluate-block-statement->retval_state + (lambda (argslist state) + (cond + ((evaluate-parse-tree->retval_state (rest-of-program argslist) + (G-remove-scope-from-state->state + (get-state-from-pair + (evaluate-parse-tree->retval_state + (block-statements argslist) (G-add-scope-to-state->state state))))))))) + +(define block-statements cdr) +(define rest-of-program cdr) + @@ -82,13 +101,6 @@ - - - - - - - ; if statement section ; Returns the value yielded from an if statement and the updated state