public static void Main(string[] args) { Tokenizer T = new Tokenizer(readFile("../../terminals.txt")); ShuntingYard N = new ShuntingYard(); string input = ""; int i = 1; input = Console.ReadLine(); Console.WriteLine("Printing out the typed input: " + input); T.setInput(input); var tok = T.next(); while (tok.Symbol != "$") { string entry = "Node" + i.ToString(); N.addNode(entry, tok); if (tok.Symbol == "$") { Console.WriteLine("Reached EOF"); break; } Console.WriteLine("Input:\n" + input); Console.WriteLine("\tok:" + tok); String sym = tok.Symbol; tok = T.next(); i++; } Console.WriteLine("Printing Nodes:"); foreach (TreeNode node in N.children) { Console.WriteLine(" " + node.sym + " tok.sym " + node.token.Symbol); } }
public static void Main(string[] args) { Tokenizer T = new Tokenizer(readFile("../../terminals.txt")); ShuntingYard N = new ShuntingYard(); string input = ""; int i = 1; input = Console.ReadLine(); Console.WriteLine("Printing out the typed input: " + input); T.setInput(input); var tok = T.next(); while (tok.Symbol != "$") { //i need to turn entry into precedence i = ShuntingYard.precedence(tok.Symbol); string precedence = i.ToString(); N.addNode(precedence, tok); if (tok.Symbol == "$") { Console.WriteLine("Reached EOF"); break; } tok = T.next(); } Console.WriteLine("Printing Nodes:"); foreach (TreeNode node in N.children) { Console.WriteLine(" " + node.sym + " tok.sym " + node.token.Symbol); } }
public ShuntingYard(Tokenizer T, string input) { T.setInput(input); Token previous = null; Token t = null; while (!(T.atEnd())) { previous = t; t = T.next(); if (t.Lexeme == "-") { if ((previous == null) || (previous.Symbol == "LPAREN") || (previous.Symbol == "NUM") || (previous.Symbol == "ID")) { t.Symbol = "NEGATE"; } } if ((t.Symbol == "NUM") || (t.Symbol == "ID")) //ID could be variable num is just numbers { numStack.Push(new TreeNode(t.Symbol, t)); } else { handleOperator(t, operatorStack, numStack); } } while (operatorStack.Count() != 0) //while not empty { var opNode = operatorStack.Pop(); var c1 = numStack.Pop(); var c2 = numStack.Pop(); opNode.addChild(c2); opNode.addChild(c1); //If we got something on the operator stack, +-*, at this point we have an operator that needs dealt with //opNode is +, get it's two children, two most recent. Pop those c1 and c2. c2, this is like creating the leaf nodes //the thing on numstack that gets pushed is like // + // / \ <--opNode // 1 2 numStack.Push(opNode); Console.WriteLine("numStack Peek" + numStack.Peek().sym); // Parse through these nodes and solves // if sym opNode // At this point we want to check to // sym == "ADDOP" // c2 + c1 // // COME BACK TO THIS } // nothing left in operatorStack // ALL NODES ARE IN NUMSTACK! //Console.WriteLine(numStack.Peek().sym); Console.WriteLine(handleNode(numStack.Peek())); //Console.WriteLine(handleNode(numStack.Peek().children[0])); //Console.WriteLine(handleNode(numStack.Peek().children[1])); }
public static void Main(string[] args) { Syms.init("calc.tokens"); string gdata; using (var r = new StreamReader("terminals.txt")) { gdata = r.ReadToEnd(); } var tokenizer = new Tokenizer(gdata); string idata = Console.ReadLine(); tokenizer.setInput(idata); IList <IToken> tokens = new List <IToken>(); while (true) { Token t = tokenizer.next(); if (t.Symbol == "$") { break; //at end } //CommonToken is defined in the ANTLR runtime CommonToken T = new CommonToken(Syms.stringToInt[t.Symbol], t.Lexeme); T.Line = t.Line; tokens.Add(T); } var antlrtokenizer = new BufferedTokenStream(new ListTokenSource(tokens)); var parser = new calcParser(antlrtokenizer); parser.BuildParseTree = true; //optional: parser.ErrorHandler = new BailErrorStrategy (); //'start' should be the name of the grammar's start symbol var listener = new MyListener(); var walker = new ParseTreeWalker(); var antlrroot = parser.start(); walker.Walk(listener, antlrroot); double v = Annotations.ptp.Get(antlrroot); Console.WriteLine($"{v}"); }
public static void Main(string[] args) { Syms.init("ssupl.tokens"); string gdata; using (var r = new StreamReader("terminals.txt")) { gdata = r.ReadToEnd(); } var tokenizer = new Tokenizer(gdata); string idata; using (var r = new StreamReader("input.txt")) { idata = r.ReadToEnd(); } tokenizer.setInput(idata); IList <IToken> tokens = new List <IToken>(); while (true) { Token t = tokenizer.next(); //Console.WriteLine("token: " + t); if (t.Symbol == "$") { break; } CommonToken T = new CommonToken(Syms.stringToInt[t.Symbol], t.Lexeme); T.Line = t.Line; tokens.Add(T); } var antlrtokenizer = new BufferedTokenStream(new ListTokenSource(tokens)); var parser = new ssuplParser(antlrtokenizer); parser.BuildParseTree = true; parser.ErrorHandler = new BailErrorStrategy(); var antlrroot = parser.start(); var listener = new CodeGenerator(); var walker = new ParseTreeWalker(); walker.Walk(listener, antlrroot); var allcode = new ASM( "default rel", "section .text", "global main", "main:", listener.code.Get(antlrroot), "section .data"); //This makes the functions and actual program using (var w = new StreamWriter("out.asm")) { //Console.WriteLine("----------------------------"); //Console.WriteLine(allcode); //Console.WriteLine("----------------------------"); w.Write(allcode.ToString()); foreach (var literal in listener.stringPool.Keys) { w.WriteLine("; " + literal.Replace("\n", "\\n")); w.WriteLine(listener.stringPool[literal].address + ":"); w.Write("db "); byte[] b = Encoding.ASCII.GetBytes(literal); for (int i = 0; i < literal.Length; ++i) { w.Write(b[i]); w.Write(","); } w.WriteLine("0"); } } //This makes variables possible in the global data after the program //Literally gets append to the bottom of the out.asm file var symtable = listener.symtable.table; foreach (var sym in symtable) { //Need dq to have 0,0,0,0 for vec4 if (sym.Value.type == VarType.VEC4) { var globaldata = new ASM( $"{sym.Value.location}:", "dq 0", "dq 0", "dq 0", "dq 0"); using (var appendglobals = File.AppendText("out.asm")) { appendglobals.Write(globaldata.ToString()); } } else { var globaldata = new ASM( $"{sym.Value.location}:", "dq 0"); using (var appendglobals = File.AppendText("out.asm")) { appendglobals.Write(globaldata.ToString()); } } } }
public static void Main(string[] args) { Syms.init("ssupl.tokens"); string gdata; using (var r = new StreamReader("terminals.txt")) { gdata = r.ReadToEnd(); } var tokenizer = new Tokenizer(gdata); string idata; using (var r = new StreamReader("input.txt")) { idata = r.ReadToEnd(); } var rex = new Regex(@"\n[ \t]+([^\n]+)"); idata = rex.Replace(idata, " $1"); idata += "\n"; tokenizer.setInput(idata); IList <IToken> tokens = new List <IToken>(); while (true) { Token t = tokenizer.next(); if (t.Symbol == "$") { break; } CommonToken T = new CommonToken(Syms.stringToInt[t.Symbol], t.Lexeme); T.Line = t.Line; tokens.Add(T); } var antlrtokenizer = new BufferedTokenStream(new ListTokenSource(tokens)); var parser = new ssuplParser(antlrtokenizer); parser.BuildParseTree = true; parser.ErrorHandler = new BailErrorStrategy(); var antlrroot = parser.start(); var listener = new CodeGenerator(); var walker = new ParseTreeWalker(); walker.Walk(listener, antlrroot); var allcode = new ASM( "default rel", "section .text", "global main", "main:", listener.code.Get(antlrroot), "section .data"); using (var w = new StreamWriter("out.asm")) { w.Write(allcode.ToString()); } }
public ShuntingYard(Tokenizer T, string input) { T.setInput(input); Token previous = null; Token t = null; while (!(T.atEnd())) { previous = t; t = T.next(); if (t.Lexeme == "-") { if ((previous == null) || (previous.Symbol == "LPAREN") || ((previous.Symbol != "NUM") && (previous.Symbol != "ID") && (previous.Symbol != "RPAREN"))) { t.Symbol = "NEGATE"; } } if ((t.Symbol == "NUM") || (t.Symbol == "ID")) //ID could be variable num is just numbers { numStack.Push(new TreeNode(t.Symbol, t)); } else if (t.Symbol == "LPAREN") { operatorStack.Push(new TreeNode(t.Symbol, t)); } else if (t.Symbol == "RPAREN") { //Console.WriteLine("HERE"); while (operatorStack.Peek().sym.Contains("LPAREN") == false) { var opNode = operatorStack.Pop(); var c1 = numStack.Pop(); if (opNode.sym != "NEGATE") { var c2 = numStack.Pop(); opNode.addChild(c2); } opNode.addChild(c1); numStack.Push(opNode); } operatorStack.Pop(); } else { handleOperator(t, operatorStack, numStack); } } while (operatorStack.Count() != 0) //while not empty m { var opNode = operatorStack.Pop(); var c1 = numStack.Pop(); if (opNode.sym != "NEGATE") { var c2 = numStack.Pop(); opNode.addChild(c2); } opNode.addChild(c1); numStack.Push(opNode); } var numNode = numStack.Pop(); var answer = handleNode(numNode); Console.WriteLine(answer); }