private AST booleanExpression()
{
#if WRITE_DEBUG_INFO
Console.WriteLine("boolean expression");
#endif
AST lhs = comparisonExpression();
if (lookAheadType(1) == Token.TokenType.NOT)
{
AST ast = notStatement();
return ast;
}
else if ( lookAhead(1).getTokenString() == "&&" ||
lookAhead(1).getTokenString() == "||"
)
{
Token operatorToken = match(Token.TokenType.OPERATOR);
//Console.WriteLine ("Matched operator token " + operatorToken.getTokenString() + " at line " + operatorToken.LineNr + " and pos " + operatorToken.LinePosition);
AST rhs = booleanExpression();
checkLeftHandSide(lhs, operatorToken);
checkRightHandSide(rhs, operatorToken);
AST booleanExpressionTree = new AST(operatorToken);
booleanExpressionTree.addChild(lhs);
booleanExpressionTree.addChild(rhs);
return booleanExpressionTree;
} else {
return lhs;
}
}