// 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(); }
// Parse and translate a math factor private void Factor() { if (Cradle.Look == '(') { Cradle.Match('('); Expression(); Cradle.Match(')'); } else if (Cradle.IsAlpha(Cradle.Look)) Ident(); else Cradle.EmitLn("MOVE #" + Cradle.GetNum() + ",D0"); }
// 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 a math factor private int Factor() { if (Cradle.Look == '(') { Cradle.Match('('); int value = Expression(); Cradle.Match(')'); return(value); } else if (Cradle.IsAlpha(Cradle.Look)) { return(Table[Cradle.GetName() - 'A']); } else { return(Cradle.GetNum()); } }
// 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; } }