From f0f34555e40e3cec51f433920c7677082df492a2 Mon Sep 17 00:00:00 2001 From: Sean Kessler Date: Fri, 23 Feb 2024 12:49:59 -0500 Subject: [PATCH] TRD-0002 push latest --- Axiom.Core/Interpreter/Parser.cs | 8 ++++++++ AxiomConsole/Program.cs | 31 +++++++++++++++++++++++++------ 2 files changed, 33 insertions(+), 6 deletions(-) diff --git a/Axiom.Core/Interpreter/Parser.cs b/Axiom.Core/Interpreter/Parser.cs index e4ec75d..4e82b2b 100644 --- a/Axiom.Core/Interpreter/Parser.cs +++ b/Axiom.Core/Interpreter/Parser.cs @@ -194,6 +194,14 @@ namespace Axiom.Interpreter { SyntaxError("Encountered 'break' without 'while'"); } + if(breakStack.Count>0) + { + long codePointer = breakStack.Peek(); + if(codePointer.Equals(CodePointer())) + { + SyntaxError("Unexpected break encountered."); + } + } breakStack.Push(CodePointer()); Expect(Scanner.ScanSymbols.break1); } diff --git a/AxiomConsole/Program.cs b/AxiomConsole/Program.cs index 28909e4..805b663 100644 --- a/AxiomConsole/Program.cs +++ b/AxiomConsole/Program.cs @@ -25,17 +25,36 @@ namespace AxiomConsole String expression=@" A=1; B=1; + C=1; + D=1; WHILE(A<10) { WHILE(B<10) { - IF(B==1)THEN BREAK; - B=B+1; + WHILE(C<10) + { + WHILE(D<10) + { + A=A+1; + B=B+1; + C=C+1; + D=D+1; + IF(D==10)THEN BREAK; + BREAK; + } + BREAK; + } + BREAK; } - IF(A==1)THEN BREAK; - A=A+1; - }"; - CodeRunner codeRunner=new CodeRunner(); + BREAK; + }"; + CodeRunner codeRunner = new CodeRunner(); + //if (!codeRunner.Execute(expression)) + //{ + // Console.WriteLine("CodeRunner Failed with {0}", codeRunner.LastMessage); + // Console.Read(); + //} + List disassembly=codeRunner.Disassemble(expression); if(codeRunner.IsInError) {