From d5c6653e8a9606c57881ddc07d5cd14757b065c5 Mon Sep 17 00:00:00 2001 From: Martin Date: Sun, 12 Oct 2025 17:15:10 +0200 Subject: [PATCH] =?UTF-8?q?Verhalten=20wie=20ein=20compiler.=20Es=20werden?= =?UTF-8?q?=20Fehler=20in=20der=20Konsole=20angegeben=20statt=20Exceptions?= =?UTF-8?q?=20zu=20schmei=C3=9Fen?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Program.cs | 515 +++++++++++++----- bin/Debug/net8.0/Compiler.dll | Bin 16896 -> 20480 bytes bin/Debug/net8.0/Compiler.pdb | Bin 15720 -> 17240 bytes bin/Debug/net8.0/input.st | 7 - obj/Debug/net8.0/Compiler.AssemblyInfo.cs | 2 +- .../net8.0/Compiler.AssemblyInfoInputs.cache | 2 +- obj/Debug/net8.0/Compiler.dll | Bin 16896 -> 20480 bytes obj/Debug/net8.0/Compiler.pdb | Bin 15720 -> 17240 bytes obj/Debug/net8.0/ref/Compiler.dll | Bin 7680 -> 8192 bytes obj/Debug/net8.0/refint/Compiler.dll | Bin 7680 -> 8192 bytes 10 files changed, 385 insertions(+), 141 deletions(-) delete mode 100644 bin/Debug/net8.0/input.st diff --git a/Program.cs b/Program.cs index a39a728..7812652 100644 --- a/Program.cs +++ b/Program.cs @@ -14,11 +14,30 @@ class Program { var input = File.ReadAllText(args[0]); var parser = new StParser(input); var prog = parser.ParseProgram(); - var emitter = new BytecodeEmitter(); - emitter.Compile(prog); - File.WriteAllBytes(args[1], emitter.BuildBinary()); - Console.WriteLine($"Wrote {args[1]}: consts={emitter.ConstantsCount}, vars={emitter.VarCount}, code={emitter.CodeLength}"); - return 0; + + if (parser.HasErrors) { + Console.WriteLine($"Compilation failed with {parser.Errors.Count} errors:"); + foreach (var error in parser.Errors) { + Console.WriteLine($"Error at line {error.Line}: {error.Message}"); + } + return 1; + } + + if (prog == null) { + Console.WriteLine("Compilation failed: invalid program structure"); + return 1; + } + + try { + var emitter = new BytecodeEmitter(); + emitter.Compile(prog); + File.WriteAllBytes(args[1], emitter.BuildBinary()); + Console.WriteLine($"Wrote {args[1]}: consts={emitter.ConstantsCount}, vars={emitter.VarCount}, code={emitter.CodeLength}"); + return 0; + } catch (Exception ex) { + Console.WriteLine($"Internal compiler error: {ex.Message}"); + return 1; + } } } @@ -26,13 +45,33 @@ class Program { public enum VarType { Int8=1, Int16=2, Int32=3, Byte=4, Bool=5 } public abstract class StNode{} public class ProgramNode:StNode{ public List Vars=new(); public List Stmts=new(); } -public class VarDecl:StNode{ public string Name; public VarType Type; public Expr? Init; } +public class VarDecl:StNode{ + required public string Name; + public VarType Type; + public Expr? Init; +} public abstract class Stmt:StNode{} -public class AssignStmt:Stmt{ public string Target; public Expr Expr; } -public class IfStmt:Stmt{ public Expr Cond; public List ThenStmts=new(); public List ElseStmts=new(); } -public class WhileStmt:Stmt{ public Expr Cond; public List Body=new(); } -public class ForStmt:Stmt{ public string Var; public Expr Start, End, Step = new IntExpr(1); public List Body=new(); } +public class AssignStmt:Stmt{ + required public string Target; + required public Expr Expr; +} +public class IfStmt:Stmt{ + required public Expr Cond; + public List ThenStmts=new(); + public List ElseStmts=new(); +} +public class WhileStmt:Stmt{ + required public Expr Cond; + public List Body=new(); +} +public class ForStmt:Stmt{ + required public string Var; + required public Expr Start; + required public Expr End; + public Expr Step = new IntExpr(1); + public List Body=new(); +} public abstract class Expr:StNode{} public class IntExpr:Expr{ public int Value; public IntExpr(int v){Value=v;} } @@ -50,204 +89,402 @@ public enum TokType { PROGRAM, VAR, END_VAR, END_PROGRAM, EOF } -public class Token{ public TokType Type; public string Text; public Token(TokType t,string s){Type=t;Text=s;} } +public class Token{ + public TokType Type; + public string Text; + public int Line; + public Token(TokType t, string s, int line) { Type=t; Text=s; Line=line; } +} + +public class CompileError { + public int Line; + public string Message; + public CompileError(int line, string msg) { Line=line; Message=msg; } +} public class StLexer { - private readonly string src; private int i; + private readonly string src; + private int i; + private int currentLine = 1; + public List Errors = new(); public StLexer(string s){src=s;} char Peek()=> i i= src.Length) return '\0'; + char c = src[i++]; + if (c == '\n') currentLine++; + return c; + } + + void AddError(string msg) => Errors.Add(new CompileError(currentLine, msg)); public Token NextToken() { while (char.IsWhiteSpace(Peek())) Next(); - if (Peek()=='\0') return new Token(TokType.EOF,""); + if (Peek()=='\0') return new Token(TokType.EOF,"", currentLine); if (char.IsLetter(Peek())||Peek()=='_'){ var sb=new StringBuilder(); + int startLine = currentLine; while (char.IsLetterOrDigit(Peek())||Peek()=='_') sb.Append(Next()); var s=sb.ToString().ToUpperInvariant(); return s switch { - "PROGRAM"=>new Token(TokType.PROGRAM,s), - "VAR"=>new Token(TokType.VAR,s), - "END_VAR"=>new Token(TokType.END_VAR,s), - "END_PROGRAM"=>new Token(TokType.END_PROGRAM,s), - "IF"=>new Token(TokType.IF,s), - "THEN"=>new Token(TokType.THEN,s), - "ELSE"=>new Token(TokType.ELSE,s), - "END_IF"=>new Token(TokType.END_IF,s), - "WHILE"=>new Token(TokType.WHILE,s), - "DO"=>new Token(TokType.DO,s), - "END_WHILE"=>new Token(TokType.END_WHILE,s), - "FOR"=>new Token(TokType.FOR,s), - "TO"=>new Token(TokType.TO,s), - "BY"=>new Token(TokType.BY,s), - "END_FOR"=>new Token(TokType.END_FOR,s), - _=>new Token(TokType.IDENT,s) + "PROGRAM"=>new Token(TokType.PROGRAM,s,startLine), + "VAR"=>new Token(TokType.VAR,s,startLine), + "END_VAR"=>new Token(TokType.END_VAR,s,startLine), + "END_PROGRAM"=>new Token(TokType.END_PROGRAM,s,startLine), + "IF"=>new Token(TokType.IF,s,startLine), + "THEN"=>new Token(TokType.THEN,s,startLine), + "ELSE"=>new Token(TokType.ELSE,s,startLine), + "END_IF"=>new Token(TokType.END_IF,s,startLine), + "WHILE"=>new Token(TokType.WHILE,s,startLine), + "DO"=>new Token(TokType.DO,s,startLine), + "END_WHILE"=>new Token(TokType.END_WHILE,s,startLine), + "FOR"=>new Token(TokType.FOR,s,startLine), + "TO"=>new Token(TokType.TO,s,startLine), + "BY"=>new Token(TokType.BY,s,startLine), + "END_FOR"=>new Token(TokType.END_FOR,s,startLine), + _=>new Token(TokType.IDENT,s,startLine) }; } if (char.IsDigit(Peek())) { var sb=new StringBuilder(); + int startLine = currentLine; while(char.IsDigit(Peek())) sb.Append(Next()); - return new Token(TokType.INT,sb.ToString()); + return new Token(TokType.INT,sb.ToString(),startLine); } - if (Peek()==':'){ Next(); if(Peek()=='='){Next(); return new Token(TokType.ASSIGN,":=");} } + int tokenLine = currentLine; + if (Peek()==':'){ + Next(); + if(Peek()=='='){ + Next(); + return new Token(TokType.ASSIGN,":=",tokenLine); + } + AddError("Expected '=' after ':' for assignment"); + // Bei einem einzelnen ':' geben wir EOF zurück und stoppen das Parsen + i--; // Gehen einen Schritt zurück, damit der fehlerhafte ':' Token beim nächsten Mal neu gelesen wird + return new Token(TokType.EOF,"",tokenLine); + } if (Peek()=='<'){ Next(); - if (Peek()=='='){Next(); return new Token(TokType.LE,"<=");} - if (Peek()=='>'){Next(); return new Token(TokType.NEQ,"<>");} - return new Token(TokType.LT,"<"); + if (Peek()=='='){Next(); return new Token(TokType.LE,"<=",tokenLine);} + if (Peek()=='>'){Next(); return new Token(TokType.NEQ,"<>",tokenLine);} + return new Token(TokType.LT,"<",tokenLine); } if (Peek()=='>'){ Next(); - if (Peek()=='='){Next(); return new Token(TokType.GE,">=");} - return new Token(TokType.GT,">"); + if (Peek()=='='){Next(); return new Token(TokType.GE,">=",tokenLine);} + return new Token(TokType.GT,">",tokenLine); } - if (Peek()=='='){Next();return new Token(TokType.EQ,"=");} + if (Peek()=='='){Next();return new Token(TokType.EQ,"=",tokenLine);} char c=Next(); - return c switch { - ';'=>new Token(TokType.SEMI,";"), - '('=>new Token(TokType.LPAREN,"("), - ')'=>new Token(TokType.RPAREN,")"), - '+'=>new Token(TokType.PLUS,"+"), - '-'=>new Token(TokType.MINUS,"-"), - '*'=>new Token(TokType.MUL,"*"), - '/'=>new Token(TokType.DIV,"/"), - _=>throw new Exception($"Unexpected '{c}'") - }; + if (c == ';') return new Token(TokType.SEMI,";",tokenLine); + if (c == '(') return new Token(TokType.LPAREN,"(",tokenLine); + if (c == ')') return new Token(TokType.RPAREN,")",tokenLine); + if (c == '+') return new Token(TokType.PLUS,"+",tokenLine); + if (c == '-') return new Token(TokType.MINUS,"-",tokenLine); + if (c == '*') return new Token(TokType.MUL,"*",tokenLine); + if (c == '/') return new Token(TokType.DIV,"/",tokenLine); + + AddError($"Unexpected character '{c}'"); + return new Token(TokType.EOF,"",tokenLine); // Skip invalid character } } // === PARSER === public class StParser { - StLexer lex; Token cur; - public StParser(string s){lex=new StLexer(s);cur=lex.NextToken();} - void Next()=>cur=lex.NextToken(); - void Expect(TokType t){if(cur.Type!=t)throw new Exception($"Expected {t}, got {cur.Type}");Next();} + StLexer lex; + Token cur; + public List Errors => lex.Errors; + public bool HasErrors => Errors.Count > 0; - public ProgramNode ParseProgram(){ + public StParser(string s){ + lex=new StLexer(s); + cur=lex.NextToken(); + } + + void Next()=>cur=lex.NextToken(); + + void AddError(string msg) => lex.Errors.Add(new CompileError(cur.Line, msg)); + + bool Expect(TokType t){ + if(cur.Type!=t) { + AddError($"Expected {t}, got {cur.Type}"); + return false; + } + Next(); + return true; + } + + public ProgramNode? ParseProgram(){ var p=new ProgramNode(); - Expect(TokType.PROGRAM); + if (!Expect(TokType.PROGRAM)) return null; + if(cur.Type==TokType.IDENT) Next(); + if(cur.Type==TokType.VAR){ Next(); - while(cur.Type==TokType.IDENT) p.Vars.Add(ParseVarDecl()); - Expect(TokType.END_VAR); + while(cur.Type==TokType.IDENT) { + var varDecl = ParseVarDecl(); + if (varDecl == null) return null; + p.Vars.Add(varDecl); + } + if (!Expect(TokType.END_VAR)) return null; } - while(cur.Type!=TokType.END_PROGRAM&&cur.Type!=TokType.EOF) - p.Stmts.Add(ParseStmt()); - Expect(TokType.END_PROGRAM); + + while(cur.Type!=TokType.END_PROGRAM && cur.Type!=TokType.EOF) { + var stmt = ParseStmt(); + if (stmt == null) return null; + p.Stmts.Add(stmt); + } + + if (!Expect(TokType.END_PROGRAM)) return null; return p; } - VarDecl ParseVarDecl(){ - string name=cur.Text; Expect(TokType.IDENT); - string tname=cur.Text.ToLowerInvariant(); Expect(TokType.IDENT); - VarType vt=tname switch{ - "int8"=>VarType.Int8,"int16"=>VarType.Int16,"int32"=>VarType.Int32,"byte"=>VarType.Byte,"bool"=>VarType.Bool, - _=>throw new Exception($"Unknown type {tname}") - }; - Expr? init=null; - if(cur.Type==TokType.ASSIGN){Next();init=ParseExpr();} - Expect(TokType.SEMI); - return new VarDecl{Name=name,Type=vt,Init=init}; - } - - Stmt ParseStmt(){ - if(cur.Type==TokType.IF) return ParseIf(); - if(cur.Type==TokType.WHILE) return ParseWhile(); - if(cur.Type==TokType.FOR) return ParseFor(); - if(cur.Type==TokType.IDENT){ - var n=cur.Text; Next(); Expect(TokType.ASSIGN); - var e=ParseExpr(); Expect(TokType.SEMI); - return new AssignStmt{Target=n,Expr=e}; + VarDecl? ParseVarDecl(){ + if (cur.Type != TokType.IDENT) { + AddError("Expected identifier for variable declaration"); + return null; } - throw new Exception($"Unexpected token {cur.Type} in stmt"); + string name=cur.Text; + Next(); + + if (cur.Type != TokType.IDENT) { + AddError("Expected type name"); + return null; + } + string tname=cur.Text.ToLowerInvariant(); + Next(); + + VarType? vt = tname switch { + "int8" => VarType.Int8, + "int16" => VarType.Int16, + "int32" => VarType.Int32, + "byte" => VarType.Byte, + "bool" => VarType.Bool, + _ => null + }; + + if (vt == null) { + AddError($"Unknown type '{tname}'"); + return null; + } + + Expr? init=null; + if(cur.Type==TokType.ASSIGN){ + Next(); // consume := + init=ParseExpr(); + if (init == null) { + AddError($"Expected expression after ':=' in variable declaration"); + return null; + } + } + + if (!Expect(TokType.SEMI)) return null; + + return new VarDecl{Name=name,Type=vt.Value,Init=init}; } - IfStmt ParseIf(){ - Next(); - var cond=ParseExpr(); Expect(TokType.THEN); + Stmt? ParseAssign() { + // Der Aufrufer hat bereits geprüft, dass wir bei einem IDENT sind + string target = cur.Text; + Next(); // consume identifier + if (cur.Type != TokType.ASSIGN) { + AddError($"Expected ':=' after identifier '{target}'"); + return null; + } + Next(); // consume := + var e = ParseExpr(); + if (e == null) return null; + if (!Expect(TokType.SEMI)) return null; + return new AssignStmt{Target=target, Expr=e}; + } + + Stmt? ParseStmt(){ + switch(cur.Type) { + case TokType.IF: return ParseIf(); + case TokType.WHILE: return ParseWhile(); + case TokType.FOR: return ParseFor(); + case TokType.IDENT: + return ParseAssign(); + default: + AddError($"Unexpected token {cur.Type} in statement"); + return null; + } + } + + IfStmt? ParseIf(){ + Next(); // IF + var cond=ParseExpr(); + if (cond == null) return null; + if (!Expect(TokType.THEN)) return null; + var node=new IfStmt{Cond=cond}; - while(cur.Type!=TokType.ELSE&&cur.Type!=TokType.END_IF) - node.ThenStmts.Add(ParseStmt()); + while(cur.Type!=TokType.ELSE && cur.Type!=TokType.END_IF && cur.Type!=TokType.EOF) { + var stmt = ParseStmt(); + if (stmt == null) return null; + node.ThenStmts.Add(stmt); + } + if(cur.Type==TokType.ELSE){ Next(); - while(cur.Type!=TokType.END_IF) - node.ElseStmts.Add(ParseStmt()); + while(cur.Type!=TokType.END_IF && cur.Type!=TokType.EOF) { + var stmt = ParseStmt(); + if (stmt == null) return null; + node.ElseStmts.Add(stmt); + } } - Expect(TokType.END_IF); Expect(TokType.SEMI); + + if (!Expect(TokType.END_IF)) return null; + if (!Expect(TokType.SEMI)) return null; return node; } - WhileStmt ParseWhile(){ + WhileStmt? ParseWhile(){ Next(); // WHILE - var cond=ParseExpr(); Expect(TokType.DO); + var cond=ParseExpr(); + if (cond == null) return null; + if (!Expect(TokType.DO)) return null; + var ws=new WhileStmt{Cond=cond}; - while(cur.Type!=TokType.END_WHILE) - ws.Body.Add(ParseStmt()); - Expect(TokType.END_WHILE); Expect(TokType.SEMI); + while(cur.Type!=TokType.END_WHILE && cur.Type!=TokType.EOF) { + var stmt = ParseStmt(); + if (stmt == null) return null; + ws.Body.Add(stmt); + } + + if (!Expect(TokType.END_WHILE)) return null; + if (!Expect(TokType.SEMI)) return null; return ws; } - ForStmt ParseFor(){ + ForStmt? ParseFor(){ Next(); // FOR - string varName = cur.Text; Expect(TokType.IDENT); - Expect(TokType.ASSIGN); - Expr start = ParseExpr(); - Expect(TokType.TO); - Expr end = ParseExpr(); + if (cur.Type != TokType.IDENT) { + AddError("Expected identifier for FOR loop variable"); + return null; + } + string varName = cur.Text; + Next(); // consume identifier + + if (cur.Type != TokType.ASSIGN) { + AddError($"Expected ':=' after identifier '{varName}'"); + return null; + } + Next(); // consume := + var start = ParseExpr(); + if (start == null) return null; + + if (!Expect(TokType.TO)) return null; + var end = ParseExpr(); + if (end == null) return null; + Expr step = new IntExpr(1); if(cur.Type==TokType.BY){ Next(); - step = ParseExpr(); + step = ParseExpr() ?? step; } - Expect(TokType.DO); + + if (!Expect(TokType.DO)) return null; + var fs = new ForStmt{Var=varName, Start=start, End=end, Step=step}; - while(cur.Type!=TokType.END_FOR) - fs.Body.Add(ParseStmt()); - Expect(TokType.END_FOR); Expect(TokType.SEMI); + while(cur.Type!=TokType.END_FOR && cur.Type!=TokType.EOF) { + var stmt = ParseStmt(); + if (stmt == null) return null; + fs.Body.Add(stmt); + } + + if (!Expect(TokType.END_FOR)) return null; + if (!Expect(TokType.SEMI)) return null; return fs; } - Expr ParseExpr()=>ParseCompare(); - Expr ParseCompare(){ - var l=ParseAddSub(); + Expr? ParseExpr() => ParseCompare(); + + Expr? ParseCompare(){ + var l = ParseAddSub(); + if (l == null) return null; + while(cur.Type is TokType.LT or TokType.GT or TokType.LE or TokType.GE or TokType.EQ or TokType.NEQ){ - var op=cur.Type; Next(); + var op=cur.Type; + Next(); var r=ParseAddSub(); + if (r == null) return null; l=new BinaryExpr(l,op,r); } return l; } - Expr ParseAddSub(){ + + Expr? ParseAddSub(){ var l=ParseMulDiv(); + if (l == null) return null; + while(cur.Type==TokType.PLUS||cur.Type==TokType.MINUS){ - var op=cur.Type;Next();var r=ParseMulDiv();l=new BinaryExpr(l,op,r); + var op=cur.Type; + Next(); + var r=ParseMulDiv(); + if (r == null) return null; + l=new BinaryExpr(l,op,r); } return l; } - Expr ParseMulDiv(){ + + Expr? ParseMulDiv(){ var l=ParsePrimary(); + if (l == null) return null; + while(cur.Type==TokType.MUL||cur.Type==TokType.DIV){ - var op=cur.Type;Next();var r=ParsePrimary();l=new BinaryExpr(l,op,r); + var op=cur.Type; + Next(); + var r=ParsePrimary(); + if (r == null) return null; + l=new BinaryExpr(l,op,r); } return l; } - Expr ParsePrimary(){ - if(cur.Type==TokType.INT){int v=int.Parse(cur.Text);Next();return new IntExpr(v);} - if(cur.Type==TokType.IDENT){string n=cur.Text;Next();return new VarExpr(n);} - if(cur.Type==TokType.LPAREN){Next();var e=ParseExpr();Expect(TokType.RPAREN);return e;} - throw new Exception($"Unexpected token {cur.Type}"); + + Expr? ParsePrimary(){ + int startLine = cur.Line; + switch(cur.Type) { + case TokType.INT: + if (!int.TryParse(cur.Text, out var v)) { + AddError($"Invalid integer literal '{cur.Text}'"); + return null; + } + Next(); + return new IntExpr(v); + + case TokType.IDENT: + string n=cur.Text; + Next(); + return new VarExpr(n); + + case TokType.LPAREN: + Next(); + var e=ParseExpr(); + if (e == null) return null; + if (!Expect(TokType.RPAREN)) return null; + return e; + + default: + AddError($"Unexpected token {cur.Type} in expression"); + return null; + } } -} + } + // === BYTECODE === public class BytecodeEmitter { List consts=new(); Dictionary syms=new(); List code=new(); - class Symbol{public string Name;public VarType Type;public int Index;} + class Symbol { + required public string Name; + public VarType Type; + public int Index; + } public int ConstantsCount=>consts.Count; public int VarCount=>syms.Count; public int CodeLength=>code.Count; public void Compile(ProgramNode p){ @@ -264,11 +501,21 @@ public class BytecodeEmitter { EmitByte(0xF0); // Program End } + Dictionary opCodes = new() { + {TokType.PLUS, 0x10}, {TokType.MINUS, 0x11}, {TokType.MUL, 0x12}, {TokType.DIV, 0x13}, + {TokType.LT, 0x14}, {TokType.GT, 0x15}, {TokType.LE, 0x16}, {TokType.GE, 0x17}, + {TokType.EQ, 0x18}, {TokType.NEQ, 0x19} + }; + void EmitStmt(Stmt s){ switch(s){ case AssignStmt a: + Symbol? symbol = null; + if (!syms.TryGetValue(a.Target, out symbol)) { + throw new Exception($"Undeclared variable '{a.Target}'"); + } EmitExpr(a.Expr); - EmitByte(0x03); EmitU16((ushort)syms[a.Target].Index); + EmitByte(0x03); EmitU16((ushort)symbol.Index); break; case IfStmt iff: @@ -293,9 +540,13 @@ public class BytecodeEmitter { break; case ForStmt f: + Symbol? forSymbol = null; + if (!syms.TryGetValue(f.Var, out forSymbol)) { + throw new Exception($"Undeclared variable '{f.Var}'"); + } // Initialisierung: var := start EmitExpr(f.Start); - EmitByte(0x03); EmitU16((ushort)syms[f.Var].Index); + EmitByte(0x03); EmitU16((ushort)forSymbol.Index); int cmpPos = code.Count; // Position des Vergleichs EmitExpr(new VarExpr(f.Var)); @@ -322,8 +573,6 @@ public class BytecodeEmitter { EmitExpr(f.End); EmitByte(0x03); EmitU16((ushort)syms[f.Var].Index); break; - - default: throw new Exception($"Unknown stmt {s.GetType().Name}"); } } @@ -333,16 +582,18 @@ public class BytecodeEmitter { case IntExpr ie: int ci=AddConst(ie.Value);EmitByte(0x01);EmitU16((ushort)ci);break; case VarExpr ve: - int vi=syms[ve.Name].Index;EmitByte(0x02);EmitU16((ushort)vi);break; + Symbol? symbol = null; + if (!syms.TryGetValue(ve.Name, out symbol)) { + throw new Exception($"Undeclared variable '{ve.Name}'"); + } + EmitByte(0x02);EmitU16((ushort)symbol.Index);break; case BinaryExpr be: + if (!opCodes.ContainsKey(be.Op)) { + throw new Exception($"Unknown operator '{be.Op}'"); + } EmitExpr(be.L);EmitExpr(be.R); - EmitByte(be.Op switch{ - TokType.PLUS=>0x10,TokType.MINUS=>0x11,TokType.MUL=>0x12,TokType.DIV=>0x13, - TokType.LT=>0x14,TokType.GT=>0x15,TokType.LE=>0x16,TokType.GE=>0x17, - TokType.EQ=>0x18,TokType.NEQ=>0x19, - _=>throw new Exception("bad op") - }); break; - default: throw new Exception("bad expr"); + EmitByte(opCodes[be.Op]); + break; } } diff --git a/bin/Debug/net8.0/Compiler.dll b/bin/Debug/net8.0/Compiler.dll index 1561c98eb114f356649ae3fb4a3fd0b106cc8680..7258a5fd5920708671d9d89cb73caf73ab995f60 100644 GIT binary patch literal 20480 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 NsrbKi{r}*B{|iQ!z4HJ7 diff --git a/bin/Debug/net8.0/Compiler.pdb b/bin/Debug/net8.0/Compiler.pdb index 313a9e870f7142204d48423abbb6f6fabc6cdc7b..66e8de9f842e639027b553b83387b6d1e30d6733 100644 GIT binary patch delta 5987 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 V{0^TT)zpe4iB@D8MkD&6e*q4Qs>c8T delta 4501 zcma)9dvIK36+h?f-MhQl&1QF#%{$r6CQY`@vq@UgHhrbFrIb=SC6K%U|xy zIeUKRJNJB#^SIxAWs2WCbWgwI28f!E5bX*QJxq`{-*Mac-aWTNq*#c^Qr+-os(`#* z<+a1>R^$H;;CK6ghi=`s1NiJSW$)eEd3N0x?rK2x-p=>-t?F@->B&>J`)-I0KFUqr8gEMUKf8-atL!l5FJ zBchTboC1yjJF^aAP?Q!KD2^6kouI4;R{_V0u-eCqupVEc2a3cmM z5G*wa0>1@$5V{KBkhepPYqAJyj4O-qEx=Vp_-Wv3;1cioe*)J4M?L(Z!Oo20Hh|B7 zYGDxb41Nq;2b}Qm7;rssg@<1SZUCP z;WnzqZe#u9UQFOszEfgAa zHRuLD200BY#XZ130-kj^AJ~tvd#ED z5QDZZE=`^&Lg{T1=>T1?;cEm@ZiHO5jHzw|IC6STkPBvJ>O0JpXfn^>;sr z>1v!m2Im9#XtU~3j)bOyKtVbT9x*bRgqqnOn@NODV$^36%TLRUeLJ{5p{^^6ZT zH~KGwYmw`-E0BNaVtW8)V$Y_f3yu7r8m0$eXODm88T1aG0kLas|8^Y)Wm;fKABvz4c}^Yme!p5*C!dHM`bf0w79 zi?jQ6cAsPSADnNHa3xb1`%c$q!sygPDrcHH!)S_YH0>KQJ*rAJuZ^Hrb|qDA?Ft|^ zc(>!_s!~j~)ond0qa6ljv{5?+b$hn(tG-&N7GiqAGPPLYSp+DmFlruNw-Q@I(@!T%E0R?ipZUQii(csSSrdAuK8m4^^xUy#O^pFB5#loi0&hvF3Q~_?^;mL@6TB9S;QRrS z{P9ZOiS4oLoJ#6}jGK+esW*Z%*=Rro4MaXZk_7eZ$Odn&g*a!~T#92$2XIrwN)oau zh&yF#klN(NY8te1t990db_!W0cZ&NkyT9RllE%=A*!?D^4aj)F!7AY$ zD6I#3g_FY#z(=)~Zcu}Q8VPtcVk}Zl4sS+m-9kL7G@ME53E}`ZA>Sky1h6#1na_VqGsOXt#O*}JB4);GZt@>LSq!L+=IV2b4EZ-nbCFjsN z*nPT6J?#!?(rZXzS*2|j4FQgIHCR$WizA@9hRA7w`z zR(05*{?hQL*;YeY_1Da_aDvi$d?9OkwwL*lLaJG_`4}79SmPEUZ6(h(tAG!`>J&7N1a>u`On- z1eH^T#M+`!nJpbOJ4BIMf;b-3Uca2*gWIdgV#b^@#_nC>KFRLy;Rm-H_XC^&J_g+n zR(bzp?mf76vio7-XUopCK7h$NAFjpMr;OlLgeJ9I&oFMqq9`D|0a_`YDm=9OkL8IV zu1QAK3>8&dqmjb*SBxM%8|={vya6s7wq;akz$&Rj@{bI1zK)N6#K&&r;~((kPq>%e z=lSTHe0+UNSi*LG4d>TLevgQ>fdj{_d&TlUqA3B%N%Vw4P PZ+{q{AGpC(($)V1*D>FG diff --git a/bin/Debug/net8.0/input.st b/bin/Debug/net8.0/input.st deleted file mode 100644 index d0f483a..0000000 --- a/bin/Debug/net8.0/input.st +++ /dev/null @@ -1,7 +0,0 @@ -PROGRAM MyProg -VAR -a; -x; -END_VAR -x := a + 5; -END_PROGRAM \ No newline at end of file diff --git a/obj/Debug/net8.0/Compiler.AssemblyInfo.cs b/obj/Debug/net8.0/Compiler.AssemblyInfo.cs index 837a151..2c1028c 100644 --- a/obj/Debug/net8.0/Compiler.AssemblyInfo.cs +++ b/obj/Debug/net8.0/Compiler.AssemblyInfo.cs @@ -13,7 +13,7 @@ using System.Reflection; [assembly: System.Reflection.AssemblyCompanyAttribute("Compiler")] [assembly: System.Reflection.AssemblyConfigurationAttribute("Debug")] [assembly: System.Reflection.AssemblyFileVersionAttribute("1.0.0.0")] -[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+f6aef1f0d176c5c9d337f8595797f1eb1e58a56b")] +[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+dbd7715193158898901ea48bb685edce0d11c047")] [assembly: System.Reflection.AssemblyProductAttribute("Compiler")] [assembly: System.Reflection.AssemblyTitleAttribute("Compiler")] [assembly: System.Reflection.AssemblyVersionAttribute("1.0.0.0")] diff --git a/obj/Debug/net8.0/Compiler.AssemblyInfoInputs.cache b/obj/Debug/net8.0/Compiler.AssemblyInfoInputs.cache index a361074..26bdf22 100644 --- a/obj/Debug/net8.0/Compiler.AssemblyInfoInputs.cache +++ b/obj/Debug/net8.0/Compiler.AssemblyInfoInputs.cache @@ -1 +1 @@ -b797b871506999fe8d363a1f65cdb2c12ea0f8c34caff9806f36efedbe800822 +48b1033f57085a9800e40e95f5bd07aadedd1a0f80d0f7a99d777225eeff6382 diff --git a/obj/Debug/net8.0/Compiler.dll b/obj/Debug/net8.0/Compiler.dll index 1561c98eb114f356649ae3fb4a3fd0b106cc8680..7258a5fd5920708671d9d89cb73caf73ab995f60 100644 GIT binary patch literal 20480 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 NsrbKi{r}*B{|iQ!z4HJ7 diff --git a/obj/Debug/net8.0/Compiler.pdb b/obj/Debug/net8.0/Compiler.pdb index 313a9e870f7142204d48423abbb6f6fabc6cdc7b..66e8de9f842e639027b553b83387b6d1e30d6733 100644 GIT binary patch delta 5987 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 V{0^TT)zpe4iB@D8MkD&6e*q4Qs>c8T delta 4501 zcma)9dvIK36+h?f-MhQl&1QF#%{$r6CQY`@vq@UgHhrbFrIb=SC6K%U|xy zIeUKRJNJB#^SIxAWs2WCbWgwI28f!E5bX*QJxq`{-*Mac-aWTNq*#c^Qr+-os(`#* z<+a1>R^$H;;CK6ghi=`s1NiJSW$)eEd3N0x?rK2x-p=>-t?F@->B&>J`)-I0KFUqr8gEMUKf8-atL!l5FJ zBchTboC1yjJF^aAP?Q!KD2^6kouI4;R{_V0u-eCqupVEc2a3cmM z5G*wa0>1@$5V{KBkhepPYqAJyj4O-qEx=Vp_-Wv3;1cioe*)J4M?L(Z!Oo20Hh|B7 zYGDxb41Nq;2b}Qm7;rssg@<1SZUCP z;WnzqZe#u9UQFOszEfgAa zHRuLD200BY#XZ130-kj^AJ~tvd#ED z5QDZZE=`^&Lg{T1=>T1?;cEm@ZiHO5jHzw|IC6STkPBvJ>O0JpXfn^>;sr z>1v!m2Im9#XtU~3j)bOyKtVbT9x*bRgqqnOn@NODV$^36%TLRUeLJ{5p{^^6ZT zH~KGwYmw`-E0BNaVtW8)V$Y_f3yu7r8m0$eXODm88T1aG0kLas|8^Y)Wm;fKABvz4c}^Yme!p5*C!dHM`bf0w79 zi?jQ6cAsPSADnNHa3xb1`%c$q!sygPDrcHH!)S_YH0>KQJ*rAJuZ^Hrb|qDA?Ft|^ zc(>!_s!~j~)ond0qa6ljv{5?+b$hn(tG-&N7GiqAGPPLYSp+DmFlruNw-Q@I(@!T%E0R?ipZUQii(csSSrdAuK8m4^^xUy#O^pFB5#loi0&hvF3Q~_?^;mL@6TB9S;QRrS z{P9ZOiS4oLoJ#6}jGK+esW*Z%*=Rro4MaXZk_7eZ$Odn&g*a!~T#92$2XIrwN)oau zh&yF#klN(NY8te1t990db_!W0cZ&NkyT9RllE%=A*!?D^4aj)F!7AY$ zD6I#3g_FY#z(=)~Zcu}Q8VPtcVk}Zl4sS+m-9kL7G@ME53E}`ZA>Sky1h6#1na_VqGsOXt#O*}JB4);GZt@>LSq!L+=IV2b4EZ-nbCFjsN z*nPT6J?#!?(rZXzS*2|j4FQgIHCR$WizA@9hRA7w`z zR(05*{?hQL*;YeY_1Da_aDvi$d?9OkwwL*lLaJG_`4}79SmPEUZ6(h(tAG!`>J&7N1a>u`On- z1eH^T#M+`!nJpbOJ4BIMf;b-3Uca2*gWIdgV#b^@#_nC>KFRLy;Rm-H_XC^&J_g+n zR(bzp?mf76vio7-XUopCK7h$NAFjpMr;OlLgeJ9I&oFMqq9`D|0a_`YDm=9OkL8IV zu1QAK3>8&dqmjb*SBxM%8|={vya6s7wq;akz$&Rj@{bI1zK)N6#K&&r;~((kPq>%e z=lSTHe0+UNSi*LG4d>TLevgQ>fdj{_d&TlUqA3B%N%Vw4P PZ+{q{AGpC(($)V1*D>FG diff --git a/obj/Debug/net8.0/ref/Compiler.dll b/obj/Debug/net8.0/ref/Compiler.dll index bd097f285176bdf11c7c0c9d0bb08b7788421ad8..e528250ec1f52cd939f1572e62348a499662eec6 100644 GIT binary patch delta 3093 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 aV5A6*Jxj;zG?K!x7pAFY^5WAONc5vj<2Or0f( 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 aV5A6*Jxj;zG?K!x7pAFY^5WAONc