PluralFormsNode EqualityExpression() { PluralFormsNode p = RelationalExpression(); if (p == null) { return(null); } PluralFormsNode n = p; if (Token.TokenType == PluralFormsToken.Type.Equal || Token.TokenType == PluralFormsToken.Type.NotEqual) { PluralFormsNode qn = new PluralFormsNode(new PluralFormsToken(Token)); if (!NextToken()) { return(null); } p = RelationalExpression(); if (p == null) { return(null); } qn.SetNode(1, p); qn.SetNode(0, n); return(qn); } return(n); }
PluralFormsNode MultiplicativeExpression() { PluralFormsNode p = PmExpression(); if (p == null) { return(null); } PluralFormsNode n = p; if (Token.TokenType == PluralFormsToken.Type.Reminder) { PluralFormsNode qn = new PluralFormsNode(new PluralFormsToken(Token)); if (!NextToken()) { return(null); } p = PmExpression(); if (p == null) { return(null); } qn.SetNode(1, p); qn.SetNode(0, n); return(qn); } return(n); }
PluralFormsNode RelationalExpression() { PluralFormsNode p = MultiplicativeExpression(); if (p == null) { return(null); } PluralFormsNode n = p; if (Token.TokenType == PluralFormsToken.Type.Greater || Token.TokenType == PluralFormsToken.Type.Less || Token.TokenType == PluralFormsToken.Type.GreaterOrEqual || Token.TokenType == PluralFormsToken.Type.LessOrEqual) { PluralFormsNode qn = new PluralFormsNode(new PluralFormsToken(Token)); if (!NextToken()) { return(null); } p = MultiplicativeExpression(); if (p == null) { return(null); } qn.SetNode(1, p); qn.SetNode(0, n); return(qn); } return(n); }
public void SetNode(int i, PluralFormsNode n) { if (i >= 0 && i <= 2) { nodes[i] = n; } }
public PluralFormsNode ReleaseNode(int i) { PluralFormsNode node = nodes[i]; nodes[i] = null; return(node); }
PluralFormsNode ParsePlural() { PluralFormsNode p = Expression(); if (p == null) { return(null); } if (Token.TokenType != PluralFormsToken.Type.Semicolon) { return(null); } return(p); }
PluralFormsNode Expression() { PluralFormsNode p = LogicalOrExpression(); if (p == null) { return(null); } PluralFormsNode n = p; if (Token.TokenType == PluralFormsToken.Type.Question) { PluralFormsNode qn = new PluralFormsNode(new PluralFormsToken(Token)); if (!NextToken()) { return(null); } p = Expression(); if (p == null) { return(null); } qn.SetNode(1, p); if (Token.TokenType != PluralFormsToken.Type.Colon) { return(null); } if (!NextToken()) { return(null); } p = Expression(); if (p == null) { return(null); } qn.SetNode(2, p); qn.SetNode(0, n); return(qn); } return(n); }
PluralFormsNode LogicalAndExpression() { PluralFormsNode p = EqualityExpression(); if (p == null) { return(null); } PluralFormsNode ln = p; // left if (Token.TokenType == PluralFormsToken.Type.LogicalAnd) { PluralFormsNode un = new PluralFormsNode(new PluralFormsToken(Token)); // up if (!NextToken()) { return(null); } p = LogicalAndExpression(); if (p == null) { return(null); } PluralFormsNode rn = p; // right if (rn.Token.TokenType == PluralFormsToken.Type.LogicalAnd) { // transform 1 && (2 && 3) -> (1 && 2) && 3 // u r // l r -> u 3 // 2 3 l 2 un.SetNode(0, ln); un.SetNode(1, rn.ReleaseNode(0)); rn.SetNode(0, un); return(rn); } un.SetNode(0, ln); un.SetNode(1, rn); return(un); } return(ln); }
PluralFormsNode PmExpression() { PluralFormsNode n; if (Token.TokenType == PluralFormsToken.Type.N || Token.TokenType == PluralFormsToken.Type.Number) { n = new PluralFormsNode(new PluralFormsToken(Token)); if (!NextToken()) { return(null); } } else if (Token.TokenType == PluralFormsToken.Type.LeftBracket) { if (!NextToken()) { return(null); } PluralFormsNode p = Expression(); if (p == null) { return(null); } n = p; if (Token.TokenType != PluralFormsToken.Type.RightBracket) { return(null); } if (!NextToken()) { return(null); } } else { return(null); } return(n); }
PluralFormsNode LogicalOrExpression() { PluralFormsNode p = LogicalAndExpression(); if (p == null) { return(null); } PluralFormsNode ln = p; if (Token.TokenType == PluralFormsToken.Type.LogicalOr) { PluralFormsNode un = new PluralFormsNode(new PluralFormsToken(Token)); if (!NextToken()) { return(null); } p = LogicalOrExpression(); if (p == null) { return(null); } PluralFormsNode rn = p; // right if (rn.Token.TokenType == PluralFormsToken.Type.LogicalOr) { // see logicalAndExpression comment un.SetNode(0, ln); un.SetNode(1, rn.ReleaseNode(0)); rn.SetNode(0, un); return(rn); } un.SetNode(0, ln); un.SetNode(1, rn); return(un); } return(ln); }
public void SetNode (int i, PluralFormsNode n) { if (i >= 0 && i <= 2) nodes[i] = n; }
public void Init (int nplurals, PluralFormsNode plural) { this.nplurals = nplurals; this.plural = plural; }
PluralFormsNode Expression () { PluralFormsNode p = LogicalOrExpression (); if (p == null) return null; PluralFormsNode n = p; if (Token.TokenType == PluralFormsToken.Type.Question) { PluralFormsNode qn = new PluralFormsNode (new PluralFormsToken (Token)); if (! NextToken ()) { return null; } p = Expression (); if (p == null) { return null; } qn.SetNode (1, p); if (Token.TokenType != PluralFormsToken.Type.Colon) { return null; } if (! NextToken ()) { return null; } p = Expression (); if (p == null) { return null; } qn.SetNode (2, p); qn.SetNode (0, n); return qn; } return n; }
PluralFormsNode LogicalOrExpression () { PluralFormsNode p = LogicalAndExpression (); if (p == null) return null; PluralFormsNode ln = p; if (Token.TokenType == PluralFormsToken.Type.LogicalOr) { PluralFormsNode un = new PluralFormsNode (new PluralFormsToken(Token)); if (! NextToken ()) { return null; } p = LogicalOrExpression (); if (p == null) { return null; } PluralFormsNode rn = p; // right if (rn.Token.TokenType == PluralFormsToken.Type.LogicalOr) { // see logicalAndExpression comment un.SetNode (0, ln); un.SetNode (1, rn.ReleaseNode (0)); rn.SetNode (0, un); return rn; } un.SetNode (0, ln); un.SetNode (1, rn); return un; } return ln; }
PluralFormsNode LogicalAndExpression () { PluralFormsNode p = EqualityExpression (); if (p == null) return null; PluralFormsNode ln = p; // left if (Token.TokenType == PluralFormsToken.Type.LogicalAnd) { PluralFormsNode un = new PluralFormsNode (new PluralFormsToken(Token)); // up if (! NextToken ()) { return null; } p = LogicalAndExpression (); if (p == null) { return null; } PluralFormsNode rn = p; // right if (rn.Token.TokenType == PluralFormsToken.Type.LogicalAnd) { // transform 1 && (2 && 3) -> (1 && 2) && 3 // u r // l r -> u 3 // 2 3 l 2 un.SetNode (0, ln); un.SetNode (1, rn.ReleaseNode (0)); rn.SetNode (0, un); return rn; } un.SetNode (0, ln); un.SetNode (1, rn); return un; } return ln; }
PluralFormsNode EqualityExpression () { PluralFormsNode p = RelationalExpression (); if (p == null) return null; PluralFormsNode n = p; if (Token.TokenType == PluralFormsToken.Type.Equal || Token.TokenType == PluralFormsToken.Type.NotEqual) { PluralFormsNode qn = new PluralFormsNode (new PluralFormsToken(Token)); if (! NextToken ()) { return null; } p = RelationalExpression (); if (p == null) { return null; } qn.SetNode (1, p); qn.SetNode (0, n); return qn; } return n; }
public bool Parse(PluralFormsCalculator calculator) { if (Token.TokenType != PluralFormsToken.Type.Nplurals) { return(false); } if (!NextToken()) { return(false); } if (Token.TokenType != PluralFormsToken.Type.Assign) { return(false); } if (!NextToken()) { return(false); } if (Token.TokenType != PluralFormsToken.Type.Number) { return(false); } int nplurals = Token.Number; if (!NextToken()) { return(false); } if (Token.TokenType != PluralFormsToken.Type.Semicolon) { return(false); } if (!NextToken()) { return(false); } if (Token.TokenType != PluralFormsToken.Type.Plural) { return(false); } if (!NextToken()) { return(false); } if (Token.TokenType != PluralFormsToken.Type.Assign) { return(false); } if (!NextToken()) { return(false); } PluralFormsNode plural = ParsePlural(); if (plural == null) { return(false); } if (Token.TokenType != PluralFormsToken.Type.Semicolon) { return(false); } if (!NextToken()) { return(false); } if (Token.TokenType != PluralFormsToken.Type.Eof) { return(false); } calculator.Init(nplurals, plural); return(true); }
PluralFormsNode MultiplicativeExpression () { PluralFormsNode p = PmExpression (); if (p == null) { return null; } PluralFormsNode n = p; if (Token.TokenType == PluralFormsToken.Type.Reminder) { PluralFormsNode qn = new PluralFormsNode (new PluralFormsToken(Token)); if (! NextToken()) { return null; } p = PmExpression (); if (p == null) { return null; } qn.SetNode (1, p); qn.SetNode (0, n); return qn; } return n; }
public void Init(int nplurals, PluralFormsNode plural) { this.nplurals = nplurals; this.plural = plural; }
public PluralFormsCalculator() { nplurals = 0; plural = null; }
public PluralFormsCalculator () { nplurals = 0; plural = null; }
PluralFormsNode RelationalExpression () { PluralFormsNode p = MultiplicativeExpression (); if (p == null) return null; PluralFormsNode n = p; if (Token.TokenType == PluralFormsToken.Type.Greater || Token.TokenType == PluralFormsToken.Type.Less || Token.TokenType == PluralFormsToken.Type.GreaterOrEqual || Token.TokenType == PluralFormsToken.Type.LessOrEqual) { PluralFormsNode qn = new PluralFormsNode (new PluralFormsToken(Token)); if (! NextToken ()) { return null; } p = MultiplicativeExpression (); if (p == null) { return null; } qn.SetNode (1, p); qn.SetNode (0, n); return qn; } return n; }
PluralFormsNode PmExpression () { PluralFormsNode n; if (Token.TokenType == PluralFormsToken.Type.N || Token.TokenType == PluralFormsToken.Type.Number) { n = new PluralFormsNode (new PluralFormsToken(Token)); if (! NextToken ()) { return null; } } else if (Token.TokenType == PluralFormsToken.Type.LeftBracket) { if (! NextToken ()) { return null; } PluralFormsNode p = Expression (); if (p == null) { return null; } n = p; if (Token.TokenType != PluralFormsToken.Type.RightBracket) { return null; } if (! NextToken ()) { return null; } } else { return null; } return n; }