private void CompileOp(JackTokenizer.ClassifiedJackToken token) { var sym = token.ParseChar(); switch (sym) { case '+': this.vm.WriteArithmetic(VMWriter.Command.ADD); break; case '-': this.vm.WriteArithmetic(VMWriter.Command.SUB); break; case '*': this.vm.WriteCall("Math.multiply", 2); break; case '/': this.vm.WriteCall("Math.divide", 2); break; case '>': this.vm.WriteArithmetic(VMWriter.Command.GT); break; case '<': this.vm.WriteArithmetic(VMWriter.Command.LT); break; case '=': this.vm.WriteArithmetic(VMWriter.Command.EQ); break; case '&': this.vm.WriteArithmetic(VMWriter.Command.AND); break; case '|': this.vm.WriteArithmetic(VMWriter.Command.OR); break; } }
public static bool ExpectSymbol(this JackTokenizer.ClassifiedJackToken token, char symbol, bool throwException = true) { if (token.TokenType() == JackTokenizer.JackTokenType.symbol && token.ParseChar() == symbol ) { return(true); } else { if (throwException) { throw new Exception("Expected symbol'" + symbol + "' but found '" + token.value + "'."); } else { return(false); } } }
public static string toXml(this JackTokenizer.ClassifiedJackToken token, SymbolTable symbolTable = null) { string xml = ""; JackTokenizer.JackTokenType tokenClass = token.TokenType(); xml += $"<{tokenClass.ToString()}{token.getIdentifierCategory(symbolTable)}>"; switch (tokenClass) { case JackTokenizer.JackTokenType.identifier: case JackTokenizer.JackTokenType.intConst: case JackTokenizer.JackTokenType.keyword: xml += token.value; break; case JackTokenizer.JackTokenType.stringConst: xml += token.ParseStringVal(); break; case JackTokenizer.JackTokenType.symbol: char sym = token.ParseChar(); if (sym == '<') { xml += "<"; } else if (sym == '>') { xml += ">"; } else if (sym == '&') { xml += "&"; } else { xml += token.value; } break; } xml += "</" + tokenClass.ToString() + ">\n"; return(xml); }
public static bool ExpectSymbol(this JackTokenizer.ClassifiedJackToken token, char[] symbols, bool throwException = true) { if (token.TokenType() == JackTokenizer.JackTokenType.symbol && symbols.Contains(token.ParseChar())) { return(true); } else { if (throwException) { throw new Exception("Expected on of theses symbols '" + symbols.ToString() + "' but found '" + token.value + "'."); } else { return(false); } } }