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