Пример #1
0
 public FSAInt()
 {
     state = State.START;
     val = 0;
     raw = "";
     suffix = TokenInt.Suffix.NONE;
 }
Пример #2
0
 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;
     }
 }
Пример #3
0
 public override sealed void Reset()
 {
     state = State.START;
     val = 0;
     raw = "";
     suffix = TokenInt.Suffix.NONE;
 }
Пример #4
0
 public ConstInt(Int64 value, TokenInt.Suffix suffix)
 {
     this.value = value;
     this.suffix = suffix;
 }