public static boolean accept(AbstractSyntaxNode node, TokenReader reader)
    {
        boolean result = false;
        
        final Term term = new Term();
        
        if (Factor.accept(term, reader))
        {
            while (reader.accept(Token.TIMES) || reader.accept(Token.DIVIDE)
                    || reader.accept(Token.MOD))
            {
                final Token op = reader.lookahead(-1);
                final Operation operation = new Operation(op.code());
                term.addChild(operation);
                Factor.accept(term, reader);
            }
            node.addChild(term);
            
            result = true;
        }
        
        return result;
    }