void Expr() {
		printer.startProduction("Expr"); 
		
		if (StartOf(3)) {
			BaseExpr();
			if (StartOf(4)) {
				op();
				BaseExpr();
				this.generator.commandOp(this.currentContext.previousOp);
				printer.endProduction("Expr");
			} else if (la.kind == 6 || la.kind == 10) {
				printer.endProduction("Expr");
			} else SynErr(34);
		} else if (la.kind == 17) {
			Get();
			printer.print("!"); 
			this.expected = BOOLEAN;
			// @SLX: Negation here
			
			BaseExpr();
			if (this.lastType != BOOLEAN) {
			// Error, negating non-boolean
			this.SemErr("trying to negate non-boolean");
			}
			else {
			this.generator.commandNegation();
			}
			
		} else SynErr(35);
	}