public FSAInt() { state = State.START; val = 0; raw = ""; suffix = TokenInt.Suffix.NONE; }
public override sealed void ReadChar(Char ch) { raw += ch; switch (state) { case State.ERROR: case State.END: state = State.ERROR; break; case State.START: if (ch == '0') { state = State.Z; } else if (Char.IsDigit(ch)) { state = State.D; val += ch - '0'; } else { state = State.ERROR; } break; case State.Z: if (ch == 'x' || ch == 'X') { state = State.ZX; } else if (Utils.IsOctDigit(ch)) { val *= 8; val += ch - '0'; state = State.O; } else if (ch == 'u' || ch == 'U') { suffix = TokenInt.Suffix.U; state = State.U; } else if (ch == 'l' || ch == 'L') { suffix = TokenInt.Suffix.L; state = State.L; } else { state = State.END; } break; case State.D: if (Char.IsDigit(ch)) { val *= 10; val += ch - '0'; state = State.D; } else if (ch == 'u' || ch == 'U') { suffix = TokenInt.Suffix.U; state = State.U; } else if (ch == 'l' || ch == 'L') { suffix = TokenInt.Suffix.L; state = State.L; } else { state = State.END; } break; case State.ZX: if (Utils.IsHexDigit(ch)) { val *= 0x10; val += Utils.GetHexDigit(ch); state = State.H; } else { state = State.ERROR; } break; case State.O: if (Utils.IsOctDigit(ch)) { val *= 8; val += ch - '0'; state = State.O; } else if (ch == 'u' || ch == 'U') { suffix = TokenInt.Suffix.U; state = State.U; } else if (ch == 'l' || ch == 'L') { suffix = TokenInt.Suffix.L; state = State.L; } else { state = State.END; } break; case State.L: if (ch == 'u' || ch == 'U') { suffix = TokenInt.Suffix.UL; state = State.UL; } else { state = State.END; } break; case State.H: if (Utils.IsHexDigit(ch)) { val *= 0x10; val += Utils.GetHexDigit(ch); state = State.H; } else if (ch == 'u' || ch == 'U') { suffix = TokenInt.Suffix.U; state = State.U; } else if (ch == 'l' || ch == 'L') { suffix = TokenInt.Suffix.L; state = State.L; } else { state = State.END; } break; case State.U: if (ch == 'l' || ch == 'L') { suffix = TokenInt.Suffix.UL; state = State.UL; } else { state = State.END; } break; case State.UL: state = State.END; break; default: state = State.ERROR; break; } }
public override sealed void Reset() { state = State.START; val = 0; raw = ""; suffix = TokenInt.Suffix.NONE; }
public ConstInt(Int64 value, TokenInt.Suffix suffix) { this.value = value; this.suffix = suffix; }