public static boolean accept(AbstractSyntaxNode node, TokenReader reader)
    {
        boolean result = false;
        
        if (reader.lookahead(0).code() == Token.IDENTIFIER
                && reader.lookahead(1).code() == Token.OPEN_PAREN)
        {
            final Token funcName = reader.lookahead(0);
            
            final FunctionCall functionCall = new FunctionCall(
                    funcName.getMatched());
            
            reader.accept(Token.IDENTIFIER);
            reader.accept(Token.OPEN_PAREN);
            
            boolean searchArgs = true;
            while (searchArgs)
            {
                if (!Expression.accept(functionCall, reader)
                        || !reader.accept(Token.COMMA))
                {
                    searchArgs = false;
                }
            }
            reader.expect(Token.CLOSE_PAREN, "function call args close");
            
            node.addChild(functionCall);
            
            result = true;
        }
        
        return result;
    }