public override Token Build(Token lastToken, ScriptEngine engine, Script script, ref SourceCode sourceCode) { string text = ""; bool space = false; bool isFloat = false; if (sourceCode.CurrentCode == '-') { text = "-"; sourceCode++; while (sourceCode.SpecialChar) { sourceCode++; } } while (!sourceCode.EOF && !engine.IsStatementEnd(sourceCode.CurrentCode, true)) { if (sourceCode.CurrentCode == ' ') { space = true; } else { if (space) { throw new Exception("Unexpected Whitespace"); } if (sourceCode.CurrentCode == '.') { if (!char.IsNumber(sourceCode.GetOffset(1))) { break; } } if (sourceCode.CurrentCode == 'f' || sourceCode.CurrentCode == 'F') { isFloat = true; } else { if (isFloat) { throw new Exception("Expected ending condition."); } text += sourceCode.CurrentCode; } } sourceCode++; } if (sourceCode.EOF) { throw new Exception("Unexpected EOF"); } return new ObjectToken<Number>(new Number(double.Parse(text))); }
public override Token Build(Token lastToken, ScriptEngine engine, Script script, ref SourceCode sourceCode) { string text = ""; bool space = false; bool isLocal = (sourceCode.CurrentCode == '@'); if (sourceCode.GetOffset(1) == '$') { // Special code. } sourceCode++; while (!sourceCode.EOF) { if (sourceCode.CurrentCode == ' ') { space = true; } else { if (engine.IsStatementEnd(sourceCode.CurrentCode)) { return new VaraibleToken(text, isLocal); } else { if (space) { //throw new Exception("Unexpected whitespace."); // Treat this as another statement, return what we have. sourceCode--; return new VaraibleToken(text, isLocal); } text += sourceCode.CurrentCode; } } sourceCode++; } if (sourceCode.EOF) { throw new Exception("Unexpected EOF"); } return null; }