You can't set q as an output port inside always loop as q is declared as of type inout. If you want to use an inout type as an output, then that must be written outside always loop(like assign q=0). If you want to use q as an output port inside always loop, then it must be declared as of type output.
And never declare inout type as reg.
Besides what both FvM and arishsu have mentioned you are using blocking assignments instead of non-blocking assignments in what is supposed to be an edge triggered procedural block (clocked always block, i.e. flip-flop(s)).
Besides that the usage of the reset and clear as asynchronous inputs was discussed on another thread. https://www.edaboard.com/threads/321110/. My advice don't use asynchronous set/preset in the same flip-flop description for an FPGA (an ASIC may have that library element) as none of the latest generation of FPGAs from Altera and Xilinx (perhaps most of the other vendors too) can implement both a reset/preset on the same flop without resorting to an ugly circuit around the flop to emulate the functionality.
Either make both reset/preset synchronous or make the power up state the asynchronous one and the other synchronous.
- - - Updated - - -
Didn't notice at first...your reset and clear do exactly the same thing. Why would you have both?
Also a minor thing but I would use ~ (bitwise inversion) instead of ! (logical not). There is a subtle difference to the way the two behave...