//-----------------------------------------------------------------------------
//	Makes a factor :: { <expression> } | <identifier>.
//-----------------------------------------------------------------------------
static void MakeFactor( ExprTree& tree )
{
	if ( mCurToken == '(' )
	{
		// Get the next token
		GetNextToken();

		// Make an expression, setting Tree to point to it
		MakeExpression( tree );
	}
	else if ( IsIdentifier( mCurToken ) )
	{
		// Make a literal node, set Tree to point to it, set left/right children to NULL. 
		MakeExprNode( tree, mCurToken, LITERAL, NULL, NULL );
	}
	else if ( IsNotOp( mCurToken ) )
	{
		// do nothing
		return;
	}
	else
	{
		// This must be a bad token
		VPC_SyntaxError( "Bad expression token: %c", mCurToken );
	}

	// Get the next token
	GetNextToken();
}
// <bool_expression> ::= [<not_op>] <bool_factor>
void NotFactor(CPU *cpu, Files file){
    bool negate = false;
    if(IsNotOp(file)){
        Match('!', file);
        negate = true;
    }
    Factor(cpu, file);
//    cpu->Negate();
}
//-----------------------------------------------------------------------------
//	Makes a term :: <factor> { <not> }.
//-----------------------------------------------------------------------------
static void MakeTerm( ExprTree& tree )
{
	// Make a factor, setting Tree to point to it
	MakeFactor( tree );

	// while the next token is !
	while( IsNotOp( mCurToken ) )
	{
		// Make an operator node, setting left child to Tree and right to NULL. (Tree points to new node)
		MakeExprNode( tree, mCurToken, NOT, tree, NULL );

		// Get the next token.
		GetNextToken();

		// Make a factor, setting the right child of Tree to point to it.
		MakeFactor(tree->right);
	}
}