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