Free cookie consent management tool by TermsFeed Policy Generator

Ignore:
Timestamp:
01/07/15 09:21:46 (9 years ago)
Author:
gkronber
Message:

#2283: refactoring and bug fixes

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/HeuristicLab.Problems.GrammaticalOptimization/HeuristicLab.Problems.GrammaticalOptimization/ExpressionInterpreter.cs

    r11727 r11732  
    5454      var r = 0.0;
    5555      r = Term(d);
    56       while (CurSy() == '+' || CurSy() == '-' || CurSy() == '^') {
    57         if (CurSy() == '+') {
     56      var curSy = CurSy();
     57      while (curSy == '+' || curSy == '-' || curSy == '^') {
     58        if (curSy == '+') {
    5859          NewSy();
    5960          r += Expr(d);
    60         } else if (CurSy() == '-') {
     61        } else if (curSy == '-') {
    6162          NewSy();
    6263          r -= Expr(d);
    63         } else if (CurSy() == '^') {
     64        } else {
    6465          NewSy();
    6566          var e = Expr(d);
    6667          r = Not(r) * e + r * Not(e); // xor = (!x AND y) OR (x AND !y)
    6768        }
     69        curSy = CurSy();
    6870      }
    6971      return r;
     
    7375      var r = 0.0;
    7476      r = Fact(d);
    75       while (CurSy() == '*' || CurSy() == '/') {
    76         if (CurSy() == '*') {
     77      var curSy = CurSy();
     78      while (curSy == '*' || curSy == '/') {
     79        if (curSy == '*') {
    7780          NewSy();
    7881          r *= Term(d);
    79         } else if (CurSy() == '/') {
     82        } else {
    8083          NewSy();
    8184          r /= Term(d);
    8285        }
     86        curSy = CurSy();
    8387      }
    8488      return r;
     
    8791    private double Fact(double[] d) {
    8892      double r = 0.0;
    89       if (CurSy() == '!') {
     93      var curSy = CurSy();
     94      if (curSy == '!') {
    9095        NewSy();
    9196        r = Not(Expr(d));
    92       } else if (CurSy() == '(') {
     97      } else if (curSy == '(') {
    9398        NewSy();
    9499        r = Expr(d);
    95100        if (CurSy() != ')') throw new ArgumentException();
    96101        NewSy();
    97       } else if (CurSy() >= 'a' && CurSy() <= 'z') {
    98         int o = Convert.ToByte(CurSy()) - Convert.ToByte('a');
     102      } else /* if (curSy >= 'a' && curSy <= 'z') */ {
     103        int o = (byte)curSy - (byte)'a';
     104        //int o = Convert.ToByte(CurSy()) - Convert.ToByte('a');
    99105        if (o < 0 || o >= d.Length) throw new ArgumentException();
    100106        r = d[o];
    101107        NewSy();
    102       } else throw new ArgumentException();
     108      }
     109      //} else throw new ArgumentException();
    103110      return r;
    104111    }
Note: See TracChangeset for help on using the changeset viewer.