Пример #1
0
 private IExpr ParseAdditiveExpression()
 {
     IExpr expr = ParseMultiplicativeExpression();
     while (mHeadToken == TokenType.Plus ||
            mHeadToken == TokenType.Minus)
     {
         SourceInfo info = mLexer.GetSourceInfo();
         ValueSymbol selector = null;
         switch (mHeadToken)
         {
         case TokenType.Plus:
             selector = ValueSymbol.Intern("+");
             break;
         case TokenType.Minus:
             selector = ValueSymbol.Intern("-");
             break;
         }
         LookAhead();
         IList<IExpr> argExprs = new List<IExpr> {
             ParseMultiplicativeExpression()
         };
         expr = new ExprSend(expr, selector, argExprs, info);
     }
     return expr;
 }
Пример #2
0
 private IExpr ParseSubscriptionAssignment(ExprSend sendExpr)
 {
     SourceInfo info = mLexer.GetSourceInfo();
     List<IExpr> argExprs = new List<IExpr>();
     argExprs.AddRange(sendExpr.ArgExprs);
     LookAhead();
     argExprs.Add(ParseExpression());
     return new ExprSend(
         sendExpr.RecvExpr,
         ValueSymbol.Intern("[]="),
         argExprs,
         info
     );
 }
Пример #3
0
 private IExpr ParseEqualityExpression()
 {
     IExpr expr = ParseRelationalExpression();
     if (mHeadToken == TokenType.DoubleEqual)
     {
         SourceInfo info = mLexer.GetSourceInfo();
         ValueSymbol selector = null;
         switch (mHeadToken)
         {
         case TokenType.DoubleEqual:
             selector = ValueSymbol.Intern("==");
             break;
         }
         LookAhead();
         IList<IExpr> argExprs = new List<IExpr> {
             ParseRelationalExpression()
         };
         expr = new ExprSend(expr, selector, argExprs, info);
     }
     return expr;
 }