public AddressToken(string lexum, LexTokenType token)
        {
            Lexum       = lexum;
            LexToken    = token;
            ResultToken = StreetToken.UNKNOWN;

            switch (LexToken)
            {
            case LexTokenType.ADDRLEX_AMP:
                PossibleTokens = StreetToken.COLLASE;
                ResultToken    = StreetToken.COLLASE;
                break;

            case LexTokenType.ADDRLEX_DASH:
                PossibleTokens = StreetToken.COLLASE;
                ResultToken    = StreetToken.COLLASE;
                break;

            case LexTokenType.ADDRLEX_ONECHAR:
                PossibleTokens = StreetToken.PREDIR | StreetToken.SUFDIR;
                break;

            case LexTokenType.ADDRLEX_TWOCHAR:
                PossibleTokens = StreetToken.PREDIR | StreetToken.SUFDIR | StreetToken.STREETTYPE;
                break;

            case LexTokenType.ADDRLEX_FRACTION:
                PossibleTokens = StreetToken.HOUSE | StreetToken.UNITNUM;
                break;

            case LexTokenType.ADDRLEX_ALPHA:
                PossibleTokens = StreetToken.STREET | StreetToken.STREETTYPE | StreetToken.UNITTYPE;
                break;

            case LexTokenType.ADDRLEX_ALPHANUM:
                PossibleTokens = StreetToken.UNITNUM;
                break;

            case LexTokenType.ADDRLEX_NUM:
                PossibleTokens = StreetToken.HOUSE | StreetToken.STREET | StreetToken.UNITNUM;
                break;

            case LexTokenType.ADDRLEX_ORDINAL:
                PossibleTokens = StreetToken.STREET | StreetToken.HOUSE;
                break;

            default:
                throw new Exception("Internal error");
            }
        }
 public bool CouldBe(StreetToken token)
 {
     return(((int)PossibleTokens & (int)token) != 0);
 }