diff --git a/lib/Doctrine/ORM/Query/Parser.php b/lib/Doctrine/ORM/Query/Parser.php
index b45bb1ceb..967781cd5 100644
--- a/lib/Doctrine/ORM/Query/Parser.php
+++ b/lib/Doctrine/ORM/Query/Parser.php
@@ -272,6 +272,8 @@ class Parser
      *
      * @param string $expected Optional expected string.
      * @param array $token Optional token.
+     *
+     * @throws \Doctrine\ORM\Query\QueryException
      */
     public function syntaxError($expected = '', $token = null)
     {
@@ -302,6 +304,8 @@ class Parser
      *
      * @param string $message Optional message.
      * @param array $token Optional token.
+     *
+     * @throws \Doctrine\ORM\Query\QueryException
      */
     public function semanticalError($message = '', $token = null)
     {
@@ -563,6 +567,10 @@ class Parser
     
     /**
      * QueryLanguage ::= SelectStatement | UpdateStatement | DeleteStatement
+     *
+     * @return \Doctrine\ORM\Query\AST\SelectStatement | 
+     *         \Doctrine\ORM\Query\AST\UpdateStatement | 
+     *         \Doctrine\ORM\Query\AST\DeleteStatement
      */
     public function QueryLanguage()
     {
@@ -587,6 +595,8 @@ class Parser
 
     /**
      * SelectStatement ::= SelectClause FromClause [WhereClause] [GroupByClause] [HavingClause] [OrderByClause]
+     *
+     * @return \Doctrine\ORM\Query\AST\SelectStatement
      */
     public function SelectStatement()
     {
@@ -619,6 +629,8 @@ class Parser
 
     /**
      * UpdateStatement ::= UpdateClause [WhereClause]
+     *
+     * @return \Doctrine\ORM\Query\AST\UpdateStatement
      */
     public function UpdateStatement()
     {
@@ -632,6 +644,8 @@ class Parser
     
     /**
      * DeleteStatement ::= DeleteClause [WhereClause]
+     *
+     * @return \Doctrine\ORM\Query\AST\DeleteStatement
      */
     public function DeleteStatement()
     {
@@ -646,6 +660,8 @@ class Parser
     
     /**
      * IdentificationVariable ::= identifier
+     *
+     * @return string
      */
     public function IdentificationVariable()
     {
@@ -656,6 +672,8 @@ class Parser
     
     /**
      * AliasIdentificationVariable = identifier
+     *
+     * @return string
      */
     public function AliasIdentificationVariable()
     {
@@ -666,6 +684,8 @@ class Parser
     
     /**
      * AbstractSchemaName ::= identifier
+     *
+     * @return string
      */
     public function AbstractSchemaName()
     {
@@ -676,6 +696,8 @@ class Parser
     
     /**
      * ResultVariable ::= identifier
+     *
+     * @return string
      */
     public function ResultVariable()
     {
@@ -687,6 +709,8 @@ class Parser
 
     /**
      * JoinAssociationPathExpression ::= IdentificationVariable "." (CollectionValuedAssociationField | SingleValuedAssociationField)
+     *
+     * @return \Doctrine\ORM\Query\AST\JoinAssociationPathExpression
      */
     public function JoinAssociationPathExpression()
     {
@@ -715,7 +739,7 @@ class Parser
      * PathExpression ::= IdentificationVariable "." {identifier "."}* identifier
      *
      * @param integer $expectedType
-     * @return AST\PathExpression
+     * @return \Doctrine\ORM\Query\AST\PathExpression
      */
     public function PathExpression($expectedType)
     {
@@ -749,6 +773,8 @@ class Parser
     
     /**
      * AssociationPathExpression ::= CollectionValuedPathExpression | SingleValuedAssociationPathExpression
+     *
+     * @return \Doctrine\ORM\Query\AST\PathExpression
      */
     public function AssociationPathExpression()
     {
@@ -760,6 +786,8 @@ class Parser
     
     /**
      * SingleValuedPathExpression ::= StateFieldPathExpression | SingleValuedAssociationPathExpression
+     *
+     * @return \Doctrine\ORM\Query\AST\PathExpression
      */
     public function SingleValuedPathExpression()
     {
@@ -771,6 +799,8 @@ class Parser
     
     /**
      * StateFieldPathExpression ::= SimpleStateFieldPathExpression | SimpleStateFieldAssociationPathExpression
+     *
+     * @return \Doctrine\ORM\Query\AST\PathExpression
      */
     public function StateFieldPathExpression()
     {
@@ -779,6 +809,8 @@ class Parser
     
     /**
      * SingleValuedAssociationPathExpression ::= IdentificationVariable "." {SingleValuedAssociationField "."}* SingleValuedAssociationField
+     *
+     * @return \Doctrine\ORM\Query\AST\PathExpression
      */
     public function SingleValuedAssociationPathExpression()
     {
@@ -787,6 +819,8 @@ class Parser
     
     /**
      * CollectionValuedPathExpression ::= IdentificationVariable "." {SingleValuedAssociationField "."}* CollectionValuedAssociationField
+     *
+     * @return \Doctrine\ORM\Query\AST\PathExpression
      */
     public function CollectionValuedPathExpression()
     {
@@ -795,6 +829,8 @@ class Parser
     
     /**
      * SimpleStateFieldPathExpression ::= IdentificationVariable "." StateField
+     *
+     * @return \Doctrine\ORM\Query\AST\PathExpression
      */
     public function SimpleStateFieldPathExpression()
     {
@@ -814,6 +850,8 @@ class Parser
     
     /**
      * SelectClause ::= "SELECT" ["DISTINCT"] SelectExpression {"," SelectExpression}
+     *
+     * @return \Doctrine\ORM\Query\AST\SelectClause
      */
     public function SelectClause()
     {
@@ -840,6 +878,8 @@ class Parser
 
     /**
      * SimpleSelectClause ::= "SELECT" ["DISTINCT"] SimpleSelectExpression
+     *
+     * @return \Doctrine\ORM\Query\AST\SimpleSelectClause
      */
     public function SimpleSelectClause()
     {
@@ -859,6 +899,8 @@ class Parser
 
     /**
      * UpdateClause ::= "UPDATE" AbstractSchemaName [["AS"] AliasIdentificationVariable] "SET" UpdateItem {"," UpdateItem}*
+     *
+     * @return \Doctrine\ORM\Query\AST\UpdateClause
      */
     public function UpdateClause()
     {
@@ -904,6 +946,8 @@ class Parser
 
     /**
      * DeleteClause ::= "DELETE" ["FROM"] AbstractSchemaName [["AS"] AliasIdentificationVariable]
+     *
+     * @return \Doctrine\ORM\Query\AST\DeleteClause
      */
     public function DeleteClause()
     {
@@ -939,6 +983,8 @@ class Parser
 
     /**
      * FromClause ::= "FROM" IdentificationVariableDeclaration {"," IdentificationVariableDeclaration}*
+     *
+     * @return \Doctrine\ORM\Query\AST\FromClause
      */
     public function FromClause()
     {
@@ -956,6 +1002,8 @@ class Parser
 
     /**
      * SubselectFromClause ::= "FROM" SubselectIdentificationVariableDeclaration {"," SubselectIdentificationVariableDeclaration}*
+     *
+     * @return \Doctrine\ORM\Query\AST\SubselectFromClause
      */
     public function SubselectFromClause()
     {
@@ -973,6 +1021,8 @@ class Parser
 
     /**
      * WhereClause ::= "WHERE" ConditionalExpression
+     *
+     * @return \Doctrine\ORM\Query\AST\WhereClause
      */
     public function WhereClause()
     {
@@ -983,6 +1033,8 @@ class Parser
 
     /**
      * HavingClause ::= "HAVING" ConditionalExpression
+     *
+     * @return \Doctrine\ORM\Query\AST\HavingClause
      */
     public function HavingClause()
     {
@@ -993,6 +1045,8 @@ class Parser
 
     /**
      * GroupByClause ::= "GROUP" "BY" GroupByItem {"," GroupByItem}*
+     *
+     * @return \Doctrine\ORM\Query\AST\GroupByClause
      */
     public function GroupByClause()
     {
@@ -1011,6 +1065,8 @@ class Parser
     
     /**
      * OrderByClause ::= "ORDER" "BY" OrderByItem {"," OrderByItem}*
+     *
+     * @return \Doctrine\ORM\Query\AST\OrderByClause
      */
     public function OrderByClause()
     {
@@ -1030,6 +1086,8 @@ class Parser
 
     /**
      * Subselect ::= SimpleSelectClause SubselectFromClause [WhereClause] [GroupByClause] [HavingClause] [OrderByClause]
+     *
+     * @return \Doctrine\ORM\Query\AST\Subselect
      */
     public function Subselect()
     {
@@ -1059,6 +1117,8 @@ class Parser
     
     /**
      * UpdateItem ::= [IdentificationVariable "."] {StateField | SingleValuedAssociationField} "=" NewValue
+     *
+     * @return \Doctrine\ORM\Query\AST\UpdateItem
      */
     public function UpdateItem()
     {
@@ -1088,6 +1148,8 @@ class Parser
 
     /**
      * GroupByItem ::= IdentificationVariable | SingleValuedPathExpression
+     *
+     * @return string | \Doctrine\ORM\Query\AST\PathExpression
      */
     public function GroupByItem()
     {
@@ -1111,6 +1173,8 @@ class Parser
      *
      * @todo Post 2.0 release. Support general SingleValuedPathExpression instead 
      * of only StateFieldPathExpression.
+     *
+     * @return \Doctrine\ORM\Query\AST\OrderByItem
      */
     public function OrderByItem()
     {
@@ -1174,6 +1238,8 @@ class Parser
     
     /**
      * IdentificationVariableDeclaration ::= RangeVariableDeclaration [IndexBy] {JoinVariableDeclaration}*
+     *
+     * @return \Doctrine\ORM\Query\AST\IdentificationVariableDeclaration
      */
     public function IdentificationVariableDeclaration()
     {
@@ -1196,6 +1262,9 @@ class Parser
 
     /**
      * SubselectIdentificationVariableDeclaration ::= IdentificationVariableDeclaration | (AssociationPathExpression ["AS"] AliasIdentificationVariable)
+     *
+     * @return \Doctrine\ORM\Query\AST\SubselectIdentificationVariableDeclaration |
+     *         \Doctrine\ORM\Query\AST\IdentificationVariableDeclaration
      */
     public function SubselectIdentificationVariableDeclaration()
     {
@@ -1215,6 +1284,8 @@ class Parser
 
     /**
      * JoinVariableDeclaration ::= Join [IndexBy]
+     *
+     * @return \Doctrine\ORM\Query\AST\JoinVariableDeclaration
      */
     public function JoinVariableDeclaration()
     {
@@ -1227,6 +1298,8 @@ class Parser
 
     /**
      * RangeVariableDeclaration ::= AbstractSchemaName ["AS"] AliasIdentificationVariable
+     *
+     * @return \Doctrine\ORM\Query\AST\RangeVariableDeclaration
      */
     public function RangeVariableDeclaration()
     {
@@ -1256,6 +1329,8 @@ class Parser
     /**
      * Join ::= ["LEFT" ["OUTER"] | "INNER"] "JOIN" JoinAssociationPathExpression
      *          ["AS"] AliasIdentificationVariable [("ON" | "WITH") ConditionalExpression]
+     *
+     * @return \Doctrine\ORM\Query\AST\Join
      */
     public function Join()
     {
@@ -1326,6 +1401,8 @@ class Parser
 
     /**
      * IndexBy ::= "INDEX" "BY" SimpleStateFieldPathExpression
+     *
+     * @return \Doctrine\ORM\Query\AST\IndexBy
      */
     public function IndexBy()
     {
@@ -1345,6 +1422,8 @@ class Parser
      * SelectExpression ::=
      *      IdentificationVariable | StateFieldPathExpression |
      *      (AggregateExpression | "(" Subselect ")" | FunctionDeclaration) [["AS"] ResultVariable]
+     *
+     * @return \Doctrine\ORM\Query\AST\SelectExpression
      */
     public function SelectExpression()
     {
@@ -1398,6 +1477,8 @@ class Parser
 
     /**
      * SimpleSelectExpression ::= StateFieldPathExpression | IdentificationVariable | (AggregateExpression [["AS"] ResultVariable])
+     *
+     * @return \Doctrine\ORM\Query\AST\SimpleSelectExpression
      */
     public function SimpleSelectExpression()
     {
@@ -1412,30 +1493,32 @@ class Parser
             $this->match($this->_lexer->lookahead['value']);
 
             return new AST\SimpleSelectExpression($this->_lexer->token['value']);
-        } else {
-            $expr = new AST\SimpleSelectExpression($this->AggregateExpression());
-
-            if ($this->_lexer->isNextToken(Lexer::T_AS)) {
-                $this->match(Lexer::T_AS);
-            }
-
-            if ($this->_lexer->isNextToken(Lexer::T_IDENTIFIER)) {
-                $resultVariable = $this->ResultVariable();
-                $expr->setFieldIdentificationVariable($resultVariable);
-                
-                // Include ResultVariable in query components.
-                $this->_queryComponents[$resultVariable] = array(
-                    'resultvariable' => $expr
-                );
-            }
-
-            return $expr;
         }
+        
+        $expr = new AST\SimpleSelectExpression($this->AggregateExpression());
+
+        if ($this->_lexer->isNextToken(Lexer::T_AS)) {
+            $this->match(Lexer::T_AS);
+        }
+
+        if ($this->_lexer->isNextToken(Lexer::T_IDENTIFIER)) {
+            $resultVariable = $this->ResultVariable();
+            $expr->setFieldIdentificationVariable($resultVariable);
+                
+            // Include ResultVariable in query components.
+            $this->_queryComponents[$resultVariable] = array(
+                'resultvariable' => $expr
+            );
+        }
+
+        return $expr;
     }
 
     
     /**
      * ConditionalExpression ::= ConditionalTerm {"OR" ConditionalTerm}*
+     *
+     * @return \Doctrine\ORM\Query\AST\ConditionalExpression
      */
     public function ConditionalExpression()
     {
@@ -1452,6 +1535,8 @@ class Parser
 
     /**
      * ConditionalTerm ::= ConditionalFactor {"AND" ConditionalFactor}*
+     *
+     * @return \Doctrine\ORM\Query\AST\ConditionalTerm
      */
     public function ConditionalTerm()
     {
@@ -1468,6 +1553,8 @@ class Parser
 
     /**
      * ConditionalFactor ::= ["NOT"] ConditionalPrimary
+     *
+     * @return \Doctrine\ORM\Query\AST\ConditionalFactor
      */
     public function ConditionalFactor()
     {
@@ -1483,6 +1570,8 @@ class Parser
 
     /**
      * ConditionalPrimary ::= SimpleConditionalExpression | "(" ConditionalExpression ")"
+     *
+     * @return \Doctrine\ORM\Query\AST\ConditionalPrimary
      */
     public function ConditionalPrimary()
     {
@@ -1587,9 +1676,9 @@ class Parser
                 default:
                     $this->syntaxError();
             }
-        } else {
-            return $this->ComparisonExpression();
         }
+        
+        return $this->ComparisonExpression();
     }
     
     
@@ -1599,7 +1688,7 @@ class Parser
      * EntityExpression ::= SingleValuedAssociationPathExpression | SimpleEntityExpression
      * SimpleEntityExpression ::= IdentificationVariable | InputParameter
      * 
-     * @return AST\CollectionMemberExpression
+     * @return \Doctrine\ORM\Query\AST\CollectionMemberExpression
      */
     public function CollectionMemberExpression()
     {
@@ -1652,6 +1741,8 @@ class Parser
     
     /**
      * ArithmeticExpression ::= SimpleArithmeticExpression | "(" Subselect ")"
+     *
+     * @return \Doctrine\ORM\Query\AST\ArithmeticExpression
      */
     public function ArithmeticExpression()
     {
@@ -1676,6 +1767,8 @@ class Parser
 
     /**
      * SimpleArithmeticExpression ::= ArithmeticTerm {("+" | "-") ArithmeticTerm}*
+     *
+     * @return \Doctrine\ORM\Query\AST\SimpleArithmeticExpression
      */
     public function SimpleArithmeticExpression()
     {
@@ -1698,6 +1791,8 @@ class Parser
 
     /**
      * ArithmeticTerm ::= ArithmeticFactor {("*" | "/") ArithmeticFactor}*
+     *
+     * @return \Doctrine\ORM\Query\AST\ArithmeticTerm
      */
     public function ArithmeticTerm()
     {
@@ -1720,6 +1815,8 @@ class Parser
 
     /**
      * ArithmeticFactor ::= [("+" | "-")] ArithmeticPrimary
+     *
+     * @return \Doctrine\ORM\Query\AST\ArithmeticFactor
      */
     public function ArithmeticFactor()
     {
@@ -1786,15 +1883,19 @@ class Parser
                     }
 
                     return $this->FunctionsReturningStrings();
-                } else {
-                    $this->syntaxError();
                 }
+                
+                $this->syntaxError();
+                break;
         }
     }
 
     
     /**
      * StringExpression ::= StringPrimary | "(" Subselect ")"
+     *
+     * @return \Doctrine\ORM\Query\AST\StringPrimary |
+     *         \Doctrine]ORM\Query\AST\Subselect
      */
     public function StringExpression()
     {
@@ -1845,6 +1946,9 @@ class Parser
 
     /**
      * EntityExpression ::= SingleValuedAssociationPathExpression | SimpleEntityExpression
+     *
+     * @return \Doctrine\ORM\Query\AST\SingleValuedAssociationPathExpression |
+     *         \Doctrine\ORM\Query\AST\SimpleEntityExpression
      */
     public function EntityExpression()
     {
@@ -1859,6 +1963,8 @@ class Parser
     
     /**
      * SimpleEntityExpression ::= IdentificationVariable | InputParameter
+     *
+     * @return string | \Doctrine\ORM\Query\AST\InputParameter
      */
     public function SimpleEntityExpression()
     {
@@ -1875,6 +1981,8 @@ class Parser
      * AggregateExpression ::=
      *  ("AVG" | "MAX" | "MIN" | "SUM") "(" ["DISTINCT"] StateFieldPathExpression ")" |
      *  "COUNT" "(" ["DISTINCT"] (IdentificationVariable | SingleValuedPathExpression) ")"
+     *
+     * @return \Doctrine\ORM\Query\AST\AggregateExpression
      */
     public function AggregateExpression()
     {
@@ -1918,6 +2026,8 @@ class Parser
     
     /**
      * QuantifiedExpression ::= ("ALL" | "ANY" | "SOME") "(" Subselect ")"
+     *
+     * @return \Doctrine\ORM\Query\AST\QuantifiedExpression
      */
     public function QuantifiedExpression()
     {
@@ -1949,6 +2059,8 @@ class Parser
 
     /**
      * BetweenExpression ::= ArithmeticExpression ["NOT"] "BETWEEN" ArithmeticExpression "AND" ArithmeticExpression
+     *
+     * @return \Doctrine\ORM\Query\AST\BetweenExpression
      */
     public function BetweenExpression()
     {
@@ -1976,6 +2088,8 @@ class Parser
      *
      * @return AST\ComparisonExpression
      * @todo Semantical checks whether $leftExpr $operator and $rightExpr are compatible.
+     *
+     * @return \Doctrine\ORM\Query\AST\ComparisonExpression
      */
     public function ComparisonExpression()
     {
@@ -1995,6 +2109,8 @@ class Parser
 
     /**
      * InExpression ::= StateFieldPathExpression ["NOT"] "IN" "(" (Literal {"," Literal}* | Subselect) ")"
+     *
+     * @return \Doctrine\ORM\Query\AST\InExpression
      */
     public function InExpression()
     {
@@ -2029,6 +2145,8 @@ class Parser
 
     /**
      * LikeExpression ::= StringExpression ["NOT"] "LIKE" (string | input_parameter) ["ESCAPE" char]
+     *
+     * @return \Doctrine\ORM\Query\AST\LikeExpression
      */
     public function LikeExpression()
     {
@@ -2063,6 +2181,8 @@ class Parser
 
     /**
      * NullComparisonExpression ::= (SingleValuedPathExpression | InputParameter) "IS" ["NOT"] "NULL"
+     *
+     * @return \Doctrine\ORM\Query\AST\NullComparisonExpression
      */
     public function NullComparisonExpression()
     {
@@ -2088,6 +2208,8 @@ class Parser
 
     /**
      * ExistsExpression ::= ["NOT"] "EXISTS" "(" Subselect ")"
+     *
+     * @return \Doctrine\ORM\Query\AST\ExistsExpression
      */
     public function ExistsExpression()
     {
@@ -2109,6 +2231,8 @@ class Parser
 
     /**
      * ComparisonOperator ::= "=" | "<" | "<=" | "<>" | ">" | ">=" | "!="
+     *
+     * @return string
      */
     public function ComparisonOperator()
     {