public abstract long Execute(ExpressionState state);
private void ParsePluralFormsHeader() { string pluralForms; if (!Headers.TryGetValue(PluralFormsHeaderKey, out pluralForms)) return; Script script = null; try { var scanner = new ExpressionEvaluator.Scanner(); scanner.SetSource(pluralForms, 0); var parser = new ExpressionEvaluator.Parser(scanner); parser.Parse(); script = parser.Script; } catch (Exception e) { throw new GettextException("Error parsing the plural forms header", e); } if (script == null) return; var assignmentNplurals = script.Assignments.SingleOrDefault(x => x.Var == "nplurals"); var assignmentN = script.Assignments.SingleOrDefault(x => x.Var == "plural"); if (assignmentNplurals == null || assignmentN == null) return; { var state = new ExpressionState(); assignmentNplurals.Execute(state); NPlurals = (int) state.GetVar("nplurals"); } { PluralExpression = assignmentN; GetPluralIndex = n => { var state = new ExpressionState(); state.SetVar("nplurals", NPlurals); state.SetVar("n", n); assignmentN.Execute(state); return (int) state.GetVar("plural"); }; } }
public long Execute(ExpressionState state) { foreach (var assignment in Assignments) { assignment.Execute(state); } return 0; }
public long Execute(ExpressionState state) { var execute = Expr.Execute(state); state.SetVar(Var, execute); return execute; }
public override long Execute(ExpressionState state) { return state.GetVar(id); }
public override long Execute(ExpressionState state) { return num; }
public override long Execute(ExpressionState state) { return expr.Execute(state); }
public override long Execute(ExpressionState state) { switch (op) { case OpEnum.Equals: return (left.Execute(state) == right.Execute(state)) ? 1 : 0; case OpEnum.NotEquals: return (left.Execute(state) != right.Execute(state)) ? 1 : 0; break; case OpEnum.And: return ((left.Execute(state) == 1) && (right.Execute(state) == 1)) ? 1 : 0; break; case OpEnum.Minus: return left.Execute(state) - right.Execute(state); break; case OpEnum.Modulo: return left.Execute(state) % right.Execute(state); break; case OpEnum.Or: return ((left.Execute(state) == 1) || (right.Execute(state) == 1)) ? 1 : 0; break; case OpEnum.LessThan: return (left.Execute(state) < right.Execute(state)) ? 1 : 0; break; case OpEnum.GreaterThan: return (left.Execute(state) > right.Execute(state)) ? 1 : 0; break; case OpEnum.LessThanOrEquals: return (left.Execute(state) <= right.Execute(state)) ? 1 : 0; break; case OpEnum.GreaterThanOrEquals: return (left.Execute(state) >= right.Execute(state)) ? 1 : 0; break; default: throw new ArgumentOutOfRangeException(); } }
public override long Execute(ExpressionState state) { return (condition.Execute(state) == 1) ? statement1.Execute(state) : statement2.Execute(state); }