private IDaisyAstNode ParseExpression()
{
var statement = ParseUnaryExpr();
var endLoop = false;
while(!endLoop)
{
switch (tokenStream.Current.Kind)
{
case TokenKind.Statement:
case TokenKind.And:
case TokenKind.Not:
statement = ParseAnd(statement);
break;
case TokenKind.Or:
statement = ParseOr(statement);
break;
case TokenKind.EOF:
case TokenKind.EndGroup:
endLoop = true;
break;
default:
throw new UnexpectedTokenException(tokenStream.Current, new[]
{
TokenKind.Statement, TokenKind.And, TokenKind.Or,
TokenKind.EOF, TokenKind.StartGroup,
});
}
}
return statement;
}