Пример #1
0
        /*
         *              BNF:
         *              <qualifier expression> ::=
         *                      <factor>[.<qualifier expression>]
         */
        protected Expression QualifierExpression(Lexer lexer)
        {
            Expression localExpression = Factor(lexer);

            if (lexer.PeekTokenSymbol(1) == Keywords.Qualifier)
            {
                lexer.NextToken();
                QualifierExpression qualifierExpression = new QualifierExpression();
                qualifierExpression.SetPosition(lexer);
                qualifierExpression.LeftExpression  = localExpression;
                qualifierExpression.RightExpression = QualifierExpression(lexer);
                return(qualifierExpression);
            }
            return(localExpression);
        }
Пример #2
0
        /*
         *      BNF:
         *      <qualified factor> ::=
         *              (([.]<identifier>) | <qualifier expression>){"["<expression>"]"[.<qualifier expression>]}
         */
        protected Expression QualifiedFactor(Lexer lexer)
        {
            Expression localExpression;

            if (lexer.PeekTokenSymbol(1) == Keywords.Qualifier)
            {
                lexer.NextToken();
                localExpression = new IdentifierExpression(String.Format("{0}{1}", Keywords.Qualifier, Identifier(lexer)));
            }
            else
            {
                localExpression = QualifierExpression(lexer);
            }

            while (lexer.PeekTokenSymbol(1) == Keywords.BeginIndexer)
            {
                IndexerExpression indexerExpression = new IndexerExpression();
                indexerExpression.SetPosition(lexer);
                indexerExpression.Expression = localExpression;
                lexer.NextToken();
                indexerExpression.Indexer = Expression(lexer);
                lexer.NextToken().CheckSymbol(Keywords.EndIndexer);
                localExpression = indexerExpression;

                if (lexer.PeekTokenSymbol(1) == Keywords.Qualifier)
                {
                    lexer.NextToken();
                    QualifierExpression qualifierExpression = new QualifierExpression();
                    qualifierExpression.SetPosition(lexer);
                    qualifierExpression.LeftExpression  = localExpression;
                    qualifierExpression.RightExpression = QualifierExpression(lexer);
                    localExpression = qualifierExpression;
                }
            }

            return(localExpression);
        }