Esempio n. 1
0
        public bool containsLiteral(SwitchCaseExpression sce)
        {
            if (sce is DefaultExpression)
            {
                return(false);
            }

            CaseExpression caseExp = (CaseExpression)sce;

            switch (caseExp.literal.value.type)
            {
            case Token.TokenValue.STRING:
                if (stringCases == null)
                {
                    return(false);
                }

                return(stringCases.Contains(caseExp.literal.value.stringValue));

            case Token.TokenValue.INT:
                if (intCases == null)
                {
                    return(false);
                }

                return(intCases.Contains(caseExp.literal.value.intValue));
            }

            return(true);
        }
Esempio n. 2
0
        public void addCase(SwitchCaseExpression ce)
        {
            if (cases == null)
            {
                cases = new List <SwitchCaseExpression>();
            }

            cases.Add(ce);

            if (ce is DefaultExpression)
            {
                hasDefaultCase = true;
                return;
            }

            if (ce is CaseExpression)
            {
                SwitchCaseExpression tmp = ce;

                while (tmp != null)
                {
                    if (tmp is DefaultExpression)
                    {
                        hasDefaultCase = true;
                        return;
                    }
                    else
                    {
                        CaseExpression caseExp = (CaseExpression)tmp;

                        switch (caseExp.literal.value.type)
                        {
                        case Token.TokenValue.STRING:
                            if (stringCases == null)
                            {
                                stringCases = new List <string>();
                            }

                            stringCases.Add(caseExp.literal.value.stringValue);
                            break;

                        case Token.TokenValue.INT:
                            if (intCases == null)
                            {
                                intCases = new List <int>();
                            }

                            intCases.Add(caseExp.literal.value.intValue);
                            break;
                        }

                        tmp = caseExp.next;
                    }
                }
            }
        }
Esempio n. 3
0
        public SwitchCaseExpression parseCase()
        {
            CaseExpression caseExp;
            DefaultExpression defaultExp;

            if (currentTokenEquals(Token.TokenValue.CASE))
            {
                caseExp = new CaseExpression();

                nextToken();

                caseExp.literal = parseLiteralExpression();

                nextTokenIfEquals(Token.TokenValue.TWOPOINTS);

                //case 'a': break;
                if (currentTokenEquals(Token.TokenValue.BREAK))
                {
                    caseExp.body = null;
                    nextToken();
                    nextTokenIfEquals(Token.TokenValue.SEMICOLON);
                }
                //case 'a':
                //case 'b': ...
                else if (currentTokenEquals(Token.TokenValue.CASE) || currentTokenEquals(Token.TokenValue.DEFAULT))
                {
                    caseExp.body = null;
                    caseExp.next = parseCase();
                }
                //case 'a':
                //  e
                //  break;
                else
                {
                    caseExp.body = parseExpression();
                    caseExp.next = null;

                    nextTokenIfEquals(Token.TokenValue.BREAK);
                    nextTokenIfEquals(Token.TokenValue.SEMICOLON);
                }

                return caseExp;

            }
            else if (currentTokenEquals(Token.TokenValue.DEFAULT))
            {
                defaultExp = new DefaultExpression();

                nextToken();
                nextTokenIfEquals(Token.TokenValue.TWOPOINTS);

                //default: break;
                if (currentTokenEquals(Token.TokenValue.BREAK))
                {
                    defaultExp.body = null;
                    nextToken();
                    nextTokenIfEquals(Token.TokenValue.SEMICOLON);
                }
                //default:
                //  e
                //  break;
                else
                {
                    defaultExp.body = parseExpression();
                    nextTokenIfEquals(Token.TokenValue.BREAK);
                    nextTokenIfEquals(Token.TokenValue.SEMICOLON);
                }

                return defaultExp;
            }

            throw new SyntaxError(lineNumber, colNumber, Token.TokenValue.CASE);
        }