public int Count()
 {
     if (Expression == "")
     {
         var ex = new Exception();
         ex.Data.Add("Type", "reference to empty cell");
         throw ex;
     }
     if (IsReevaluated)
     {
         return((int)Value);
     }
     try
     {
         var inputStream       = new AntlrInputStream(Expression);
         var lexer             = new GrammarLexer(inputStream);
         var commonTokenStream = new CommonTokenStream(lexer);
         var parser            = new GrammarParser(commonTokenStream);
         parser.RemoveErrorListeners();
         parser.AddErrorListener(new ParsingErrorListener());
         var expr = parser.rule();
         int val  = (new ParsingVisitor(this)).Visit(expr);
         IsReevaluated = true;
         return(val);
     }
     catch
     {
         throw;
     }
 }
Esempio n. 2
0
 void CalculateCellExpression(ElectronicTableCell cell)
 {
     try
     {
         var inputStream       = new AntlrInputStream(cell.Expression);
         var lexer             = new GrammarLexer(inputStream);
         var commonTokenStream = new CommonTokenStream(lexer);
         var parser            = new GrammarParser(commonTokenStream);
         parser.RemoveErrorListeners();
         parser.AddErrorListener(new ParsingErrorListener());
         var expr = parser.rule();
         cell.Value = (new ParsingVisitor(cell)).Visit(expr);
     }
     catch
     {
         throw;
     }
     cell.IsReevaluated = true;
     foreach (var dep in cell.Depended)
     {
         CalculateCellExpression(dep);
     }
 }