コード例 #1
0
 public virtual Expression VisitPrefixExpression(PrefixExpression pExpr)
 {
     if (pExpr == null) return null;
     pExpr.Expression = this.VisitExpression(pExpr.Expression);
     return pExpr;
 }
コード例 #2
0
ファイル: Duplicator.cs プロジェクト: modulexcite/SHFB-1
 public override Expression VisitPrefixExpression(PrefixExpression pExpr)
 {
     if (pExpr == null) return null;
     return base.VisitPrefixExpression((PrefixExpression)pExpr.Clone());
 }
コード例 #3
0
ファイル: Decompiler.cs プロジェクト: ZingModelChecker/Zing
        public override Expression VisitPrefixExpression(PrefixExpression pExpr)
        {
            switch (pExpr.Operator)
            {
                case NodeType.Add:
                    Write("++");
                    break;

                case NodeType.Sub:
                    Write("--");
                    break;

                default:
                    throw new InvalidOperationException("Unknown prefix operator");
            }
            this.VisitExpression(pExpr.Expression);
            return pExpr;
        }
コード例 #4
0
ファイル: Parser.cs プロジェクト: dbremner/specsharp
 private Expression ParseUnaryExpression(TokenSet followers){
   if (this.currentToken == Token.EndOfFile) {
     if (this.returnedEmptyIdentForEOF)
       return null;
     else {
       this.returnedEmptyIdentForEOF = true;
       return this.scanner.GetIdentifier();
     }
   }
   Expression expression;
   switch(this.currentToken){
     case Token.Plus:
     case Token.BitwiseNot:
     case Token.LogicalNot:
     case Token.Subtract:
     case Token.BitwiseAnd:
       UnaryExpression uexpr = new UnaryExpression();
       uexpr.SourceContext = this.scanner.CurrentSourceContext;
       uexpr.NodeType = Parser.ConvertToUnaryNodeType(this.currentToken);
       this.GetNextToken();
       uexpr.Operand = this.ParseUnaryExpression(followers);
       if (uexpr.Operand == null) return null;
       uexpr.SourceContext.EndPos = uexpr.Operand.SourceContext.EndPos;
       expression = uexpr;
       break;
     case Token.Multiply:
       AddressDereference adref = new AddressDereference();
       adref.SourceContext = this.scanner.CurrentSourceContext;
       adref.ExplicitOperator = AddressDereference.ExplicitOp.Star;
       this.GetNextToken();
       adref.Address = this.ParseUnaryExpression(followers);
       if (adref.Address == null) return null;
       adref.SourceContext.EndPos = adref.Address.SourceContext.EndPos;
       expression = adref;
       break;
     case Token.AddOne:
     case Token.SubtractOne:
       PrefixExpression prefixExpr = new PrefixExpression();
       prefixExpr.SourceContext = this.scanner.CurrentSourceContext;
       prefixExpr.Operator = Parser.ConvertToBinaryNodeType(this.currentToken);
       this.GetNextToken();
       prefixExpr.Expression = this.ParseUnaryExpression(followers);
       if (prefixExpr.Expression == null) return null;
       prefixExpr.SourceContext.EndPos = prefixExpr.Expression.SourceContext.EndPos;
       expression = prefixExpr;
       break;
     case Token.LeftParenthesis:
       expression = this.ParseCastExpression(followers);
       break;
     case Token.LeftBrace:
       expression = this.ParseBlockExpression(ScannerState.Code, this.scanner.CurrentSourceContext, followers);
       break;
     case Token.Exists:
     case Token.Forall:
     case Token.Count:
     case Token.Sum:
     case Token.Max:
     case Token.Min:
     case Token.Product:
       Quantifier q = new Quantifier();
       q.SourceContext = this.scanner.CurrentSourceContext;
       ScannerState ss = this.scanner.state;
       Token quantType = this.currentToken;
       SourceContext sctx = this.scanner.CurrentSourceContext;
       this.GetNextToken();
       if (this.currentToken == Token.Unique){
         quantType = this.currentToken;
         this.GetNextToken();
       }
       // not necessarily a quantifier unless there is an open curly!!
       // REVIEW: Is that enough of a test? Or do we need to try parsing the comprehension?
       if (this.currentToken != Token.LeftBrace) {
         //Restore prior state and reparse as expression
         this.scanner.endPos = q.SourceContext.StartPos;
         this.scanner.state = ss;
         this.currentToken = Token.None;
         this.GetNextToken();
         goto default;
       }
       q.QuantifierType = Parser.ConvertToQuantifierType(quantType);
       this.Skip(Token.LeftBrace);
       Comprehension c = this.ParseComprehension(followers, sctx);
       if (c == null) {
         return null;
       }
       q.Comprehension = c;
       q.SourceContext.EndPos = c.SourceContext.EndPos;
       expression = q;
       break;
     default:
       expression = this.ParsePrimaryExpression(followers);
       break;
   }
   return expression;
 }
コード例 #5
0
 public EventingVisitor(Action<PrefixExpression> visitPrefixExpression) { VisitedPrefixExpression += visitPrefixExpression; } public event Action<PrefixExpression> VisitedPrefixExpression; public override Expression VisitPrefixExpression(PrefixExpression pExpr) { if (VisitedPrefixExpression != null) VisitedPrefixExpression(pExpr); return base.VisitPrefixExpression(pExpr); }