/* * 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); }
/* * 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); }