// Lexical scanner private void Scan() { int k; while (Cradle.Look == Cradle.CR) { Cradle.Fin(); } if (Cradle.IsAlpha(Cradle.Look)) { GetName(); } else if (Cradle.IsDigit(Cradle.Look)) { GetNum(); } else if (IsOp(Cradle.Look)) { GetOp(); } else { Value = Cradle.Look.ToString(); Token = SymType.Operator; Cradle.GetChar(); } Cradle.SkipWhite(); }
// Skip over a comma private void SkipComma() { Cradle.SkipWhite(); if (Cradle.Look == ',') { Cradle.GetChar(); Cradle.SkipWhite(); } }
// Get a number private void GetNum() { Value = ""; if (!Cradle.IsDigit(Cradle.Look)) { Cradle.Expected("Integer"); } while (Cradle.IsDigit(Cradle.Look)) { Value += Cradle.Look; Cradle.GetChar(); } Token = SymType.Number; }
// Get an operator private void GetOp() { Value = ""; if (!IsOp(Cradle.Look)) { Cradle.Expected("Operator"); } while (IsOp(Cradle.Look)) { Value += Cradle.Look; Cradle.GetChar(); } Token = SymType.Operator; }
// Get an identifier private void GetName() { Value = ""; if (!Cradle.IsAlpha(Cradle.Look)) { Cradle.Expected("Name"); } while (Cradle.IsAlNum(Cradle.Look)) { Value += char.ToUpper(Cradle.Look); Cradle.GetChar(); } Token = KWCode[Lookup(Value) + 1]; }
// Parse and translate the first math factor private void SignedFactor() { if (Cradle.Look == '+') Cradle.GetChar(); if (Cradle.Look == '-') { Cradle.GetChar(); if (Cradle.IsDigit(Cradle.Look)) Cradle.EmitLn("MOVE #-" + Cradle.GetNum() + ",D0"); else { Factor(); Cradle.EmitLn("NEG D0"); } } else Factor(); }
// Get an operator private void GetOp() { Value = ""; if (!IsOp(Cradle.Look)) { Cradle.Expected("Operator"); } while (IsOp(Cradle.Look)) { Value += Cradle.Look; Cradle.GetChar(); } if (Value.Length == 1) { Token = Value[0]; } else { Token = '?'; } }
// Get an identifier private void GetName() { int k; Value = ""; if (!Cradle.IsAlpha(Cradle.Look)) { Cradle.Expected("Name"); } while (Cradle.IsAlNum(Cradle.Look)) { Value += char.ToUpper(Cradle.Look); Cradle.GetChar(); } k = Lookup(Value); if (k == -1) { Token = SymType.Ident; } else { Token = (SymType)k; } }