diff --git a/ep16/src/main/java/org/teachfx/antlr4/ep16/Compiler.java b/ep16/src/main/java/org/teachfx/antlr4/ep16/Compiler.java index 7ca9d1d..2dd7e11 100644 --- a/ep16/src/main/java/org/teachfx/antlr4/ep16/Compiler.java +++ b/ep16/src/main/java/org/teachfx/antlr4/ep16/Compiler.java @@ -11,7 +11,9 @@ import org.teachfx.antlr4.ep16.visitor.LocalDefine; import org.teachfx.antlr4.ep16.visitor.LocalResolver; -import java.io.*; +import java.io.FileInputStream; +import java.io.IOException; +import java.io.InputStream; public class Compiler { diff --git a/ep16/src/main/java/org/teachfx/antlr4/ep16/parser/CymbolLexer.java b/ep16/src/main/java/org/teachfx/antlr4/ep16/parser/CymbolLexer.java index 26ee17d..ee76e77 100644 --- a/ep16/src/main/java/org/teachfx/antlr4/ep16/parser/CymbolLexer.java +++ b/ep16/src/main/java/org/teachfx/antlr4/ep16/parser/CymbolLexer.java @@ -2,14 +2,12 @@ package org.teachfx.antlr4.ep16.parser; -import org.antlr.v4.runtime.Lexer; -import org.antlr.v4.runtime.CharStream; -import org.antlr.v4.runtime.Token; -import org.antlr.v4.runtime.TokenStream; import org.antlr.v4.runtime.*; -import org.antlr.v4.runtime.atn.*; +import org.antlr.v4.runtime.atn.ATN; +import org.antlr.v4.runtime.atn.ATNDeserializer; +import org.antlr.v4.runtime.atn.LexerATNSimulator; +import org.antlr.v4.runtime.atn.PredictionContextCache; import org.antlr.v4.runtime.dfa.DFA; -import org.antlr.v4.runtime.misc.*; @SuppressWarnings({"all", "warnings", "unchecked", "unused", "cast", "CheckReturnValue"}) public class CymbolLexer extends Lexer { diff --git a/ep16/src/main/java/org/teachfx/antlr4/ep16/parser/CymbolParser.java b/ep16/src/main/java/org/teachfx/antlr4/ep16/parser/CymbolParser.java index 39caa2d..1035df6 100644 --- a/ep16/src/main/java/org/teachfx/antlr4/ep16/parser/CymbolParser.java +++ b/ep16/src/main/java/org/teachfx/antlr4/ep16/parser/CymbolParser.java @@ -2,14 +2,17 @@ package org.teachfx.antlr4.ep16.parser; -import org.antlr.v4.runtime.atn.*; -import org.antlr.v4.runtime.dfa.DFA; import org.antlr.v4.runtime.*; -import org.antlr.v4.runtime.misc.*; -import org.antlr.v4.runtime.tree.*; +import org.antlr.v4.runtime.atn.ATN; +import org.antlr.v4.runtime.atn.ATNDeserializer; +import org.antlr.v4.runtime.atn.ParserATNSimulator; +import org.antlr.v4.runtime.atn.PredictionContextCache; +import org.antlr.v4.runtime.dfa.DFA; +import org.antlr.v4.runtime.tree.ParseTreeListener; +import org.antlr.v4.runtime.tree.ParseTreeVisitor; +import org.antlr.v4.runtime.tree.TerminalNode; + import java.util.List; -import java.util.Iterator; -import java.util.ArrayList; @SuppressWarnings({"all", "warnings", "unchecked", "unused", "cast", "CheckReturnValue"}) public class CymbolParser extends Parser { diff --git a/ep17/src/main/java/org/teachfx/antlr4/ep17/parser/CymbolLexer.java b/ep17/src/main/java/org/teachfx/antlr4/ep17/parser/CymbolLexer.java index eb1a7a1..51e507c 100644 --- a/ep17/src/main/java/org/teachfx/antlr4/ep17/parser/CymbolLexer.java +++ b/ep17/src/main/java/org/teachfx/antlr4/ep17/parser/CymbolLexer.java @@ -2,14 +2,12 @@ package org.teachfx.antlr4.ep17.parser; -import org.antlr.v4.runtime.Lexer; -import org.antlr.v4.runtime.CharStream; -import org.antlr.v4.runtime.Token; -import org.antlr.v4.runtime.TokenStream; import org.antlr.v4.runtime.*; -import org.antlr.v4.runtime.atn.*; +import org.antlr.v4.runtime.atn.ATN; +import org.antlr.v4.runtime.atn.ATNDeserializer; +import org.antlr.v4.runtime.atn.LexerATNSimulator; +import org.antlr.v4.runtime.atn.PredictionContextCache; import org.antlr.v4.runtime.dfa.DFA; -import org.antlr.v4.runtime.misc.*; @SuppressWarnings({"all", "warnings", "unchecked", "unused", "cast", "CheckReturnValue"}) public class CymbolLexer extends Lexer { diff --git a/ep17/src/main/java/org/teachfx/antlr4/ep17/parser/CymbolParser.java b/ep17/src/main/java/org/teachfx/antlr4/ep17/parser/CymbolParser.java index 387aada..a77ae6c 100644 --- a/ep17/src/main/java/org/teachfx/antlr4/ep17/parser/CymbolParser.java +++ b/ep17/src/main/java/org/teachfx/antlr4/ep17/parser/CymbolParser.java @@ -2,14 +2,17 @@ package org.teachfx.antlr4.ep17.parser; -import org.antlr.v4.runtime.atn.*; -import org.antlr.v4.runtime.dfa.DFA; import org.antlr.v4.runtime.*; -import org.antlr.v4.runtime.misc.*; -import org.antlr.v4.runtime.tree.*; +import org.antlr.v4.runtime.atn.ATN; +import org.antlr.v4.runtime.atn.ATNDeserializer; +import org.antlr.v4.runtime.atn.ParserATNSimulator; +import org.antlr.v4.runtime.atn.PredictionContextCache; +import org.antlr.v4.runtime.dfa.DFA; +import org.antlr.v4.runtime.tree.ParseTreeListener; +import org.antlr.v4.runtime.tree.ParseTreeVisitor; +import org.antlr.v4.runtime.tree.TerminalNode; + import java.util.List; -import java.util.Iterator; -import java.util.ArrayList; @SuppressWarnings({"all", "warnings", "unchecked", "unused", "cast", "CheckReturnValue"}) public class CymbolParser extends Parser { diff --git a/ep17/src/main/java/org/teachfx/antlr4/ep17/visitor/CallGraphVisitor.java b/ep17/src/main/java/org/teachfx/antlr4/ep17/visitor/CallGraphVisitor.java index 48f5b7a..b5705a8 100644 --- a/ep17/src/main/java/org/teachfx/antlr4/ep17/visitor/CallGraphVisitor.java +++ b/ep17/src/main/java/org/teachfx/antlr4/ep17/visitor/CallGraphVisitor.java @@ -2,7 +2,8 @@ import org.teachfx.antlr4.ep17.misc.Graph; import org.teachfx.antlr4.ep17.parser.CymbolBaseVisitor; -import org.teachfx.antlr4.ep17.parser.CymbolParser.*; +import org.teachfx.antlr4.ep17.parser.CymbolParser.ExprFuncCallContext; +import org.teachfx.antlr4.ep17.parser.CymbolParser.FunctionDeclContext; public class CallGraphVisitor extends CymbolBaseVisitor { public Graph callGraph; private String currentFunctionName = null; diff --git a/ep18/src/main/java/org/teachfx/antlr4/ep18/VMInterpreter.java b/ep18/src/main/java/org/teachfx/antlr4/ep18/VMInterpreter.java index 49c1faf..c2080d4 100644 --- a/ep18/src/main/java/org/teachfx/antlr4/ep18/VMInterpreter.java +++ b/ep18/src/main/java/org/teachfx/antlr4/ep18/VMInterpreter.java @@ -4,9 +4,9 @@ import org.antlr.v4.runtime.CommonTokenStream; import org.antlr.v4.runtime.tree.ParseTree; import org.antlr.v4.runtime.tree.ParseTreeWalker; -import org.teachfx.antlr4.ep18.stackvm.*; import org.teachfx.antlr4.ep18.parser.VMAssemblerLexer; import org.teachfx.antlr4.ep18.parser.VMAssemblerParser; +import org.teachfx.antlr4.ep18.stackvm.*; import java.io.FileInputStream; import java.io.InputStream; diff --git a/ep18/src/main/java/org/teachfx/antlr4/ep18/VMRunner.java b/ep18/src/main/java/org/teachfx/antlr4/ep18/VMRunner.java index b4d3869..ef373d6 100644 --- a/ep18/src/main/java/org/teachfx/antlr4/ep18/VMRunner.java +++ b/ep18/src/main/java/org/teachfx/antlr4/ep18/VMRunner.java @@ -5,10 +5,10 @@ import org.antlr.v4.runtime.CommonTokenStream; import org.antlr.v4.runtime.tree.ParseTree; import org.antlr.v4.runtime.tree.ParseTreeWalker; -import org.teachfx.antlr4.ep18.stackvm.ByteCodeAssembler; -import org.teachfx.antlr4.ep18.stackvm.BytecodeDefinition; import org.teachfx.antlr4.ep18.parser.VMAssemblerLexer; import org.teachfx.antlr4.ep18.parser.VMAssemblerParser; +import org.teachfx.antlr4.ep18.stackvm.ByteCodeAssembler; +import org.teachfx.antlr4.ep18.stackvm.BytecodeDefinition; import java.io.FileInputStream; import java.io.InputStream; diff --git a/ep18/src/main/java/org/teachfx/antlr4/ep18/parser/VMAssemblerLexer.java b/ep18/src/main/java/org/teachfx/antlr4/ep18/parser/VMAssemblerLexer.java index fbe5856..3602a4e 100644 --- a/ep18/src/main/java/org/teachfx/antlr4/ep18/parser/VMAssemblerLexer.java +++ b/ep18/src/main/java/org/teachfx/antlr4/ep18/parser/VMAssemblerLexer.java @@ -2,14 +2,12 @@ package org.teachfx.antlr4.ep18.parser; -import org.antlr.v4.runtime.Lexer; -import org.antlr.v4.runtime.CharStream; -import org.antlr.v4.runtime.Token; -import org.antlr.v4.runtime.TokenStream; import org.antlr.v4.runtime.*; -import org.antlr.v4.runtime.atn.*; +import org.antlr.v4.runtime.atn.ATN; +import org.antlr.v4.runtime.atn.ATNDeserializer; +import org.antlr.v4.runtime.atn.LexerATNSimulator; +import org.antlr.v4.runtime.atn.PredictionContextCache; import org.antlr.v4.runtime.dfa.DFA; -import org.antlr.v4.runtime.misc.*; @SuppressWarnings({"all", "warnings", "unchecked", "unused", "cast", "CheckReturnValue"}) public class VMAssemblerLexer extends Lexer { diff --git a/ep18/src/main/java/org/teachfx/antlr4/ep18/parser/VMAssemblerParser.java b/ep18/src/main/java/org/teachfx/antlr4/ep18/parser/VMAssemblerParser.java index 050cba9..9cce11b 100644 --- a/ep18/src/main/java/org/teachfx/antlr4/ep18/parser/VMAssemblerParser.java +++ b/ep18/src/main/java/org/teachfx/antlr4/ep18/parser/VMAssemblerParser.java @@ -2,14 +2,17 @@ package org.teachfx.antlr4.ep18.parser; -import org.antlr.v4.runtime.atn.*; -import org.antlr.v4.runtime.dfa.DFA; import org.antlr.v4.runtime.*; -import org.antlr.v4.runtime.misc.*; -import org.antlr.v4.runtime.tree.*; +import org.antlr.v4.runtime.atn.ATN; +import org.antlr.v4.runtime.atn.ATNDeserializer; +import org.antlr.v4.runtime.atn.ParserATNSimulator; +import org.antlr.v4.runtime.atn.PredictionContextCache; +import org.antlr.v4.runtime.dfa.DFA; +import org.antlr.v4.runtime.tree.ParseTreeListener; +import org.antlr.v4.runtime.tree.ParseTreeVisitor; +import org.antlr.v4.runtime.tree.TerminalNode; + import java.util.List; -import java.util.Iterator; -import java.util.ArrayList; @SuppressWarnings({"all", "warnings", "unchecked", "unused", "cast", "CheckReturnValue"}) public class VMAssemblerParser extends Parser { diff --git a/ep18/src/main/java/org/teachfx/antlr4/ep18/stackvm/ByteCodeAssembler.java b/ep18/src/main/java/org/teachfx/antlr4/ep18/stackvm/ByteCodeAssembler.java index 9fb4523..da7571c 100644 --- a/ep18/src/main/java/org/teachfx/antlr4/ep18/stackvm/ByteCodeAssembler.java +++ b/ep18/src/main/java/org/teachfx/antlr4/ep18/stackvm/ByteCodeAssembler.java @@ -3,8 +3,10 @@ import org.antlr.v4.runtime.Token; import org.teachfx.antlr4.ep18.parser.VMAssemblerBaseListener; import org.teachfx.antlr4.ep18.parser.VMAssemblerParser; -import org.teachfx.antlr4.ep18.parser.*; -import org.teachfx.antlr4.ep18.parser.VMAssemblerParser.*; +import org.teachfx.antlr4.ep18.parser.VMAssemblerParser.FunctionDeclarationContext; +import org.teachfx.antlr4.ep18.parser.VMAssemblerParser.GlobalsContext; +import org.teachfx.antlr4.ep18.parser.VMAssemblerParser.InstrContext; +import org.teachfx.antlr4.ep18.parser.VMAssemblerParser.LabelContext; import java.util.ArrayList; import java.util.HashMap; diff --git a/ep19/src/main/java/org/teachfx/antlr4/ep19/Compiler.java b/ep19/src/main/java/org/teachfx/antlr4/ep19/Compiler.java index be98c41..2104898 100644 --- a/ep19/src/main/java/org/teachfx/antlr4/ep19/Compiler.java +++ b/ep19/src/main/java/org/teachfx/antlr4/ep19/Compiler.java @@ -11,7 +11,10 @@ import org.teachfx.antlr4.ep19.pass.LocalDefine; import org.teachfx.antlr4.ep19.pass.LocalResolver; -import java.io.*; +import java.io.FileInputStream; +import java.io.FileNotFoundException; +import java.io.IOException; +import java.io.InputStream; public class Compiler { diff --git a/ep19/src/main/java/org/teachfx/antlr4/ep19/parser/CymbolLexer.java b/ep19/src/main/java/org/teachfx/antlr4/ep19/parser/CymbolLexer.java index c3f8960..5892c70 100644 --- a/ep19/src/main/java/org/teachfx/antlr4/ep19/parser/CymbolLexer.java +++ b/ep19/src/main/java/org/teachfx/antlr4/ep19/parser/CymbolLexer.java @@ -2,14 +2,12 @@ package org.teachfx.antlr4.ep19.parser; -import org.antlr.v4.runtime.Lexer; -import org.antlr.v4.runtime.CharStream; -import org.antlr.v4.runtime.Token; -import org.antlr.v4.runtime.TokenStream; import org.antlr.v4.runtime.*; -import org.antlr.v4.runtime.atn.*; +import org.antlr.v4.runtime.atn.ATN; +import org.antlr.v4.runtime.atn.ATNDeserializer; +import org.antlr.v4.runtime.atn.LexerATNSimulator; +import org.antlr.v4.runtime.atn.PredictionContextCache; import org.antlr.v4.runtime.dfa.DFA; -import org.antlr.v4.runtime.misc.*; @SuppressWarnings({"all", "warnings", "unchecked", "unused", "cast", "CheckReturnValue"}) public class CymbolLexer extends Lexer { diff --git a/ep19/src/main/java/org/teachfx/antlr4/ep19/parser/CymbolParser.java b/ep19/src/main/java/org/teachfx/antlr4/ep19/parser/CymbolParser.java index f2eca1d..e352c51 100644 --- a/ep19/src/main/java/org/teachfx/antlr4/ep19/parser/CymbolParser.java +++ b/ep19/src/main/java/org/teachfx/antlr4/ep19/parser/CymbolParser.java @@ -2,14 +2,17 @@ package org.teachfx.antlr4.ep19.parser; -import org.antlr.v4.runtime.atn.*; -import org.antlr.v4.runtime.dfa.DFA; import org.antlr.v4.runtime.*; -import org.antlr.v4.runtime.misc.*; -import org.antlr.v4.runtime.tree.*; +import org.antlr.v4.runtime.atn.ATN; +import org.antlr.v4.runtime.atn.ATNDeserializer; +import org.antlr.v4.runtime.atn.ParserATNSimulator; +import org.antlr.v4.runtime.atn.PredictionContextCache; +import org.antlr.v4.runtime.dfa.DFA; +import org.antlr.v4.runtime.tree.ParseTreeListener; +import org.antlr.v4.runtime.tree.ParseTreeVisitor; +import org.antlr.v4.runtime.tree.TerminalNode; + import java.util.List; -import java.util.Iterator; -import java.util.ArrayList; @SuppressWarnings({"all", "warnings", "unchecked", "unused", "cast", "CheckReturnValue"}) public class CymbolParser extends Parser { diff --git a/ep19/src/main/java/org/teachfx/antlr4/ep19/pass/CymbolASTVisitor.java b/ep19/src/main/java/org/teachfx/antlr4/ep19/pass/CymbolASTVisitor.java index 85f1616..b06b7d3 100644 --- a/ep19/src/main/java/org/teachfx/antlr4/ep19/pass/CymbolASTVisitor.java +++ b/ep19/src/main/java/org/teachfx/antlr4/ep19/pass/CymbolASTVisitor.java @@ -2,7 +2,10 @@ import org.teachfx.antlr4.ep19.misc.Util; import org.teachfx.antlr4.ep19.parser.CymbolBaseVisitor; -import org.teachfx.antlr4.ep19.parser.CymbolParser.*; +import org.teachfx.antlr4.ep19.parser.CymbolParser.BlockContext; +import org.teachfx.antlr4.ep19.parser.CymbolParser.ExprFuncCallContext; +import org.teachfx.antlr4.ep19.parser.CymbolParser.FunctionDeclContext; +import org.teachfx.antlr4.ep19.parser.CymbolParser.StructDeclContext; public abstract class CymbolASTVisitor extends CymbolBaseVisitor { public String tab = ""; diff --git a/ep19/src/main/java/org/teachfx/antlr4/ep19/pass/LocalDefine.java b/ep19/src/main/java/org/teachfx/antlr4/ep19/pass/LocalDefine.java index 9ea7ab4..372b284 100644 --- a/ep19/src/main/java/org/teachfx/antlr4/ep19/pass/LocalDefine.java +++ b/ep19/src/main/java/org/teachfx/antlr4/ep19/pass/LocalDefine.java @@ -3,11 +3,15 @@ import org.antlr.v4.runtime.ParserRuleContext; import org.antlr.v4.runtime.tree.ParseTreeProperty; import org.teachfx.antlr4.ep19.misc.Util; -import org.teachfx.antlr4.ep19.symtab.TypeTable; -import org.teachfx.antlr4.ep19.symtab.scope.*; -import org.teachfx.antlr4.ep19.symtab.symbol.*; -import org.teachfx.antlr4.ep19.parser.CymbolBaseVisitor; import org.teachfx.antlr4.ep19.parser.CymbolParser.*; +import org.teachfx.antlr4.ep19.symtab.TypeTable; +import org.teachfx.antlr4.ep19.symtab.scope.BaseScope; +import org.teachfx.antlr4.ep19.symtab.scope.GlobalScope; +import org.teachfx.antlr4.ep19.symtab.scope.LocalScope; +import org.teachfx.antlr4.ep19.symtab.scope.Scope; +import org.teachfx.antlr4.ep19.symtab.symbol.MethodSymbol; +import org.teachfx.antlr4.ep19.symtab.symbol.StructSymbol; +import org.teachfx.antlr4.ep19.symtab.symbol.VariableSymbol; /** * diff --git a/ep20/README.md b/ep20/README.md index 168c6a3..722cdc4 100644 --- a/ep20/README.md +++ b/ep20/README.md @@ -35,6 +35,61 @@ graph LR ### CFG ```mermaid -graph TD; - L0["iconst 0;istore 0;;iconst 7;igt"] -``` \ No newline at end of file +graph LR; + .def dec1: args=1 ,locals=1[t0 = @0; +t1 = 1 ; +t0 SUB t1; +jmp L1; +] +L1[ret; +] +.def main: args=0 ,locals=1[t0 = 10 ; +@0 = t0; +jmp L4; +] +L4[t0 = @0; +t1 = 0 ; +t0 GT t1; +jmpIf t0,L5,L6; +] +L5[t0 = @0; +t1 = 5 ; +t0 GT t1; +jmpIf t0,L7,L8; +] +L7[t0 = @0; +call print(args:1); +t0 = @0; +t1 = 7 ; +t0 EQ t1; +jmpIf t0,L9,L10; +] +L9[t0 = 7 ; +jmp L3; +] +L10[] +L8[t0 = "break" ; +call print(args:1); +t0 = @0; +call dec1(args:1); +@0 = t0; +jmp L4; +] +L6[t0 = 0 ; +jmp L3; +] +L3[halt; +] +L0 --> L1 +L2 --> L4 +L4 --> L5 +L5 --> L7 +L7 --> L9 +L9 --> L10 +L10 --> L8 +L8 --> L6 +L6 --> L3 + + +``` + diff --git a/ep20/src/main/java/org/teachfx/antlr4/ep20/Compiler.java b/ep20/src/main/java/org/teachfx/antlr4/ep20/Compiler.java index bfb8d43..d590d27 100644 --- a/ep20/src/main/java/org/teachfx/antlr4/ep20/Compiler.java +++ b/ep20/src/main/java/org/teachfx/antlr4/ep20/Compiler.java @@ -12,7 +12,6 @@ import org.teachfx.antlr4.ep20.parser.CymbolLexer; import org.teachfx.antlr4.ep20.parser.CymbolParser; import org.teachfx.antlr4.ep20.pass.ast.CymbolASTBuilder; - import org.teachfx.antlr4.ep20.pass.codegen.CymbolAssembler; import org.teachfx.antlr4.ep20.pass.ir.CymbolIRBuilder; import org.teachfx.antlr4.ep20.pass.symtab.LocalDefine; @@ -51,7 +50,7 @@ public static void main(String[] args) throws IOException { astRoot.accept(irBuilder); var cfg = irBuilder.getCFG(); - logger.info("CFG:\n" + cfg); + logger.info("CFG:\n" + cfg.toString()); var assembler = new CymbolAssembler(); irBuilder.prog.accept(assembler); diff --git a/ep20/src/main/java/org/teachfx/antlr4/ep20/ir/expr/val/ConstVal.java b/ep20/src/main/java/org/teachfx/antlr4/ep20/ir/expr/val/ConstVal.java index 5d7b3c4..d2fcd0e 100644 --- a/ep20/src/main/java/org/teachfx/antlr4/ep20/ir/expr/val/ConstVal.java +++ b/ep20/src/main/java/org/teachfx/antlr4/ep20/ir/expr/val/ConstVal.java @@ -30,7 +30,7 @@ public void setVal(T val) { @Override public String toString() { if(val instanceof String) { - return " %s ".formatted(val); + return " '%s' ".formatted(val); } else if (val instanceof Integer) { return " %d ".formatted(val); } else if (val instanceof Boolean) { diff --git a/ep20/src/main/java/org/teachfx/antlr4/ep20/ir/stmt/CJMP.java b/ep20/src/main/java/org/teachfx/antlr4/ep20/ir/stmt/CJMP.java index 85fe7ed..ec27d1c 100644 --- a/ep20/src/main/java/org/teachfx/antlr4/ep20/ir/stmt/CJMP.java +++ b/ep20/src/main/java/org/teachfx/antlr4/ep20/ir/stmt/CJMP.java @@ -1,8 +1,8 @@ package org.teachfx.antlr4.ep20.ir.stmt; -import org.teachfx.antlr4.ep20.pass.cfg.LinearIRBlock; import org.teachfx.antlr4.ep20.ir.IRVisitor; import org.teachfx.antlr4.ep20.ir.expr.VarSlot; +import org.teachfx.antlr4.ep20.pass.cfg.LinearIRBlock; public class CJMP extends Stmt { public VarSlot cond; diff --git a/ep20/src/main/java/org/teachfx/antlr4/ep20/ir/stmt/JMP.java b/ep20/src/main/java/org/teachfx/antlr4/ep20/ir/stmt/JMP.java index 839b015..77b8853 100644 --- a/ep20/src/main/java/org/teachfx/antlr4/ep20/ir/stmt/JMP.java +++ b/ep20/src/main/java/org/teachfx/antlr4/ep20/ir/stmt/JMP.java @@ -1,7 +1,7 @@ package org.teachfx.antlr4.ep20.ir.stmt; -import org.teachfx.antlr4.ep20.pass.cfg.LinearIRBlock; import org.teachfx.antlr4.ep20.ir.IRVisitor; +import org.teachfx.antlr4.ep20.pass.cfg.LinearIRBlock; public class JMP extends Stmt { diff --git a/ep20/src/main/java/org/teachfx/antlr4/ep20/parser/CymbolLexer.java b/ep20/src/main/java/org/teachfx/antlr4/ep20/parser/CymbolLexer.java index 790fb64..093d6fd 100644 --- a/ep20/src/main/java/org/teachfx/antlr4/ep20/parser/CymbolLexer.java +++ b/ep20/src/main/java/org/teachfx/antlr4/ep20/parser/CymbolLexer.java @@ -2,14 +2,12 @@ package org.teachfx.antlr4.ep20.parser; -import org.antlr.v4.runtime.Lexer; -import org.antlr.v4.runtime.CharStream; -import org.antlr.v4.runtime.Token; -import org.antlr.v4.runtime.TokenStream; import org.antlr.v4.runtime.*; -import org.antlr.v4.runtime.atn.*; +import org.antlr.v4.runtime.atn.ATN; +import org.antlr.v4.runtime.atn.ATNDeserializer; +import org.antlr.v4.runtime.atn.LexerATNSimulator; +import org.antlr.v4.runtime.atn.PredictionContextCache; import org.antlr.v4.runtime.dfa.DFA; -import org.antlr.v4.runtime.misc.*; @SuppressWarnings({"all", "warnings", "unchecked", "unused", "cast", "CheckReturnValue"}) public class CymbolLexer extends Lexer { diff --git a/ep20/src/main/java/org/teachfx/antlr4/ep20/parser/CymbolParser.java b/ep20/src/main/java/org/teachfx/antlr4/ep20/parser/CymbolParser.java index fd41f27..9c0f76e 100644 --- a/ep20/src/main/java/org/teachfx/antlr4/ep20/parser/CymbolParser.java +++ b/ep20/src/main/java/org/teachfx/antlr4/ep20/parser/CymbolParser.java @@ -2,14 +2,17 @@ package org.teachfx.antlr4.ep20.parser; -import org.antlr.v4.runtime.atn.*; -import org.antlr.v4.runtime.dfa.DFA; import org.antlr.v4.runtime.*; -import org.antlr.v4.runtime.misc.*; -import org.antlr.v4.runtime.tree.*; +import org.antlr.v4.runtime.atn.ATN; +import org.antlr.v4.runtime.atn.ATNDeserializer; +import org.antlr.v4.runtime.atn.ParserATNSimulator; +import org.antlr.v4.runtime.atn.PredictionContextCache; +import org.antlr.v4.runtime.dfa.DFA; +import org.antlr.v4.runtime.tree.ParseTreeListener; +import org.antlr.v4.runtime.tree.ParseTreeVisitor; +import org.antlr.v4.runtime.tree.TerminalNode; + import java.util.List; -import java.util.Iterator; -import java.util.ArrayList; @SuppressWarnings({"all", "warnings", "unchecked", "unused", "cast", "CheckReturnValue"}) public class CymbolParser extends Parser { diff --git a/ep20/src/main/java/org/teachfx/antlr4/ep20/pass/ast/CymbolASTBuilder.java b/ep20/src/main/java/org/teachfx/antlr4/ep20/pass/ast/CymbolASTBuilder.java index 9ddf0ad..d3b4044 100644 --- a/ep20/src/main/java/org/teachfx/antlr4/ep20/pass/ast/CymbolASTBuilder.java +++ b/ep20/src/main/java/org/teachfx/antlr4/ep20/pass/ast/CymbolASTBuilder.java @@ -215,7 +215,9 @@ public ASTNode visitPrimaryFLOAT(CymbolParser.PrimaryFLOATContext ctx) { @Override public ASTNode visitPrimarySTRING(CymbolParser.PrimarySTRINGContext ctx) { - return new StringExprNode(ctx.getText(),ctx); + var size = ctx.getText().length(); + + return new StringExprNode(ctx.getText().substring(1, size - 1),ctx); } @Override diff --git a/ep20/src/main/java/org/teachfx/antlr4/ep20/pass/cfg/BasicBlock.java b/ep20/src/main/java/org/teachfx/antlr4/ep20/pass/cfg/BasicBlock.java index 8502e2d..2a09370 100644 --- a/ep20/src/main/java/org/teachfx/antlr4/ep20/pass/cfg/BasicBlock.java +++ b/ep20/src/main/java/org/teachfx/antlr4/ep20/pass/cfg/BasicBlock.java @@ -2,7 +2,6 @@ import org.jetbrains.annotations.Contract; import org.jetbrains.annotations.NotNull; - import org.teachfx.antlr4.ep20.ir.IRNode; import org.teachfx.antlr4.ep20.ir.expr.Operand; import org.teachfx.antlr4.ep20.ir.stmt.Label; @@ -73,6 +72,10 @@ public Optional