private SType ProcessTypeSub(SToken oneToken) { SType ret; string t_TypeName = oneToken.StringValue; // tokenlist for syntax checking List<SToken> tokenList = new List<SToken>(); oneToken = SLexer.Tokenizer(_dataStream); #region switch switch (oneToken.TokenType) { case STokenType.BOOLEAN: case STokenType.REAL: case STokenType.INTEGER: case STokenType.LOGICAL: case STokenType.NUMBER: ret = new SType(t_TypeName, SParameter.TokenTypeToAttribType(oneToken.TokenType)); CleanUpSemiColon(); break; case STokenType.STRING: ret = new STypeString(t_TypeName); ret.Kind = SParameter.TokenTypeToAttribType(oneToken.TokenType); oneToken = SLexer.Tokenizer(_dataStream); if (oneToken.TokenType == STokenType.LEFTPARENTHESIS) { // process width oneToken = SLexer.Tokenizer(_dataStream); ((STypeString)ret).StringLength = (short)oneToken.IntegerValue; oneToken = SLexer.Tokenizer(_dataStream); // right parenthesis oneToken = SLexer.Tokenizer(_dataStream); if (oneToken.TokenType == STokenType.FIXED) { // process fixed ((STypeString)ret).IsFixed = true; // semicolon oneToken = SLexer.Tokenizer(_dataStream); } } break; case STokenType.SIMPLEID: ret = new STypeSimple(t_TypeName, oneToken.StringValue); ret.Kind = SParameter.TokenTypeToAttribType(oneToken.TokenType); CleanUpSemiColon(); break; case STokenType.ARRAY: case STokenType.LIST: case STokenType.SET: case STokenType.BAG: ret = new STypeCollection(t_TypeName, oneToken.TokenType); ret.Kind = SParameter.TokenTypeToAttribType(oneToken.TokenType); collection((STypeCollection)ret); break; case STokenType.ENUMERATION: ret = new STypeEnum(t_TypeName); ret.Kind = SParameter.TokenTypeToAttribType(oneToken.TokenType); oneToken = SLexer.Tokenizer(_dataStream); if (oneToken.TokenType != STokenType.OF) { throw new Exception("Syntax error in Schema Name Definition"); } GetInsideSingleParenthesis(tokenList); foreach (SToken aToken in tokenList) { if (aToken.TokenType == STokenType.SIMPLEID) { ((STypeEnum)ret).EnumList.Add(aToken.StringValue); } else { throw new Exception("Syntax error in Enumeration Type Definition : " + ret.Name); } } CleanUpSemiColon(); break; case STokenType.SELECT: ret = new STypeSelect(t_TypeName); ret.Kind = SParameter.TokenTypeToAttribType(oneToken.TokenType); GetInsideSingleParenthesis(tokenList); foreach (SToken aToken in tokenList) { if (aToken.TokenType == STokenType.SIMPLEID) { ((STypeSelect)ret).SelectList.Add(aToken.StringValue, null); } else { throw new Exception("Syntax error in Select Type Definition : " + ret.Name); } } CleanUpSemiColon(); break; default: ret = null; if (_logFile != null) _logFile.WriteLine(oneToken.TokenType.ToString() + " : " + oneToken.StringValue); break; } #endregion // switch return ret; }
private SType ProcessTypeSub(SToken oneToken) { SType ret; string t_TypeName = oneToken.StringValue; // tokenlist for syntax checking List <SToken> tokenList = new List <SToken>(); oneToken = SLexer.Tokenizer(_dataStream); #region switch switch (oneToken.TokenType) { case STokenType.BOOLEAN: case STokenType.REAL: case STokenType.INTEGER: case STokenType.LOGICAL: case STokenType.NUMBER: ret = new SType(t_TypeName, SParameter.TokenTypeToAttribType(oneToken.TokenType)); CleanUpSemiColon(); break; case STokenType.STRING: ret = new STypeString(t_TypeName); ret.Kind = SParameter.TokenTypeToAttribType(oneToken.TokenType); oneToken = SLexer.Tokenizer(_dataStream); if (oneToken.TokenType == STokenType.LEFTPARENTHESIS) { // process width oneToken = SLexer.Tokenizer(_dataStream); ((STypeString)ret).StringLength = (short)oneToken.IntegerValue; oneToken = SLexer.Tokenizer(_dataStream); // right parenthesis oneToken = SLexer.Tokenizer(_dataStream); if (oneToken.TokenType == STokenType.FIXED) { // process fixed ((STypeString)ret).IsFixed = true; // semicolon oneToken = SLexer.Tokenizer(_dataStream); } } break; case STokenType.SIMPLEID: ret = new STypeSimple(t_TypeName, oneToken.StringValue); ret.Kind = SParameter.TokenTypeToAttribType(oneToken.TokenType); CleanUpSemiColon(); break; case STokenType.ARRAY: case STokenType.LIST: case STokenType.SET: case STokenType.BAG: ret = new STypeCollection(t_TypeName, oneToken.TokenType); ret.Kind = SParameter.TokenTypeToAttribType(oneToken.TokenType); collection((STypeCollection)ret); break; case STokenType.ENUMERATION: ret = new STypeEnum(t_TypeName); ret.Kind = SParameter.TokenTypeToAttribType(oneToken.TokenType); oneToken = SLexer.Tokenizer(_dataStream); if (oneToken.TokenType != STokenType.OF) { throw new Exception("Syntax error in Schema Name Definition"); } GetInsideSingleParenthesis(tokenList); foreach (SToken aToken in tokenList) { if (aToken.TokenType == STokenType.SIMPLEID) { ((STypeEnum)ret).EnumList.Add(aToken.StringValue); } else { throw new Exception("Syntax error in Enumeration Type Definition : " + ret.Name); } } CleanUpSemiColon(); break; case STokenType.SELECT: ret = new STypeSelect(t_TypeName); ret.Kind = SParameter.TokenTypeToAttribType(oneToken.TokenType); GetInsideSingleParenthesis(tokenList); foreach (SToken aToken in tokenList) { if (aToken.TokenType == STokenType.SIMPLEID) { ((STypeSelect)ret).SelectList.Add(aToken.StringValue, null); } else { throw new Exception("Syntax error in Select Type Definition : " + ret.Name); } } CleanUpSemiColon(); break; default: ret = null; if (_logFile != null) { _logFile.WriteLine(oneToken.TokenType.ToString() + " : " + oneToken.StringValue); } break; } #endregion // switch return(ret); }