示例#1
0
        private void collection(STypeCollection sTypeCol)
        {
            // Left brackett
            SToken oneToken = SLexer.Tokenizer(_dataStream);

            // lbound
            oneToken        = SLexer.Tokenizer(_dataStream);
            sTypeCol.LBound = getBound(oneToken);
            oneToken        = SLexer.Tokenizer(_dataStream);
            oneToken        = SLexer.Tokenizer(_dataStream);
            sTypeCol.UBound = getBound(oneToken);
            // right bracket
            oneToken = SLexer.Tokenizer(_dataStream);
            // of
            oneToken = SLexer.Tokenizer(_dataStream);
            // type
            oneToken = SLexer.Tokenizer(_dataStream);
            SParamType sp = SParameter.TokenTypeToAttribType(oneToken.TokenType);

            switch (oneToken.TokenType)
            {
            case STokenType.BOOLEAN:
            case STokenType.REAL:
            case STokenType.INTEGER:
            case STokenType.LOGICAL:
            case STokenType.NUMBER:
            case STokenType.STRING:
            case STokenType.ARRAY:
            case STokenType.LIST:
            case STokenType.SET:
            case STokenType.BAG:
                sTypeCol.CollectionType = sp;
                sTypeCol.CollectionName = SParameter.TypeToString(sp);
                break;

            case STokenType.SIMPLEID:
                sTypeCol.CollectionName = oneToken.StringValue;
                break;

            default:
                if (_logFile != null)
                {
                    _logFile.WriteLine(oneToken.TokenType.ToString() + " : " + oneToken.StringValue);
                }
                break;
            }
        }
示例#2
0
        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;
        }
示例#3
0
        private void collection(STypeCollection sTypeCol)
        {
            // Left brackett
            SToken oneToken = SLexer.Tokenizer(_dataStream);
            // lbound
            oneToken = SLexer.Tokenizer(_dataStream);
            sTypeCol.LBound = getBound(oneToken);
            oneToken = SLexer.Tokenizer(_dataStream);
            oneToken = SLexer.Tokenizer(_dataStream);
            sTypeCol.UBound = getBound(oneToken);
            // right bracket
            oneToken = SLexer.Tokenizer(_dataStream);
            // of
            oneToken = SLexer.Tokenizer(_dataStream);
            // type
            oneToken = SLexer.Tokenizer(_dataStream);
            SParamType sp = SParameter.TokenTypeToAttribType(oneToken.TokenType);

            switch (oneToken.TokenType)
            {
                case STokenType.BOOLEAN:
                case STokenType.REAL:
                case STokenType.INTEGER:
                case STokenType.LOGICAL:
                case STokenType.NUMBER:
                case STokenType.STRING:
                case STokenType.ARRAY:
                case STokenType.LIST:
                case STokenType.SET:
                case STokenType.BAG:
                    sTypeCol.CollectionType = sp;
                    sTypeCol.CollectionName = SParameter.TypeToString(sp);
                    break;
                case STokenType.SIMPLEID:
                    sTypeCol.CollectionName = oneToken.StringValue;
                    break;
                default:
                    if (_logFile != null)
                        _logFile.WriteLine(oneToken.TokenType.ToString() + " : " + oneToken.StringValue);
                    break;
            }
        }
示例#4
0
        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);
        }