Once you have done the correction suggested by @MortenZdk, you need to also consider your logic. In the following, you will never go to state s7 because the assignments done for full step will always over write it.
WHEN s0=>
--Half step
if(FULL = '0' AND RIGHT = '1') then
state <= s1;
elsif (RIGHT = '0') then
state <= s7;
end if;
--Full step
if (FULL = '1' AND RIGHT = '1') then
state <= s2;
elsif (RIGHT = '0') then
state <= s6;
end if;
For this example, I would recommend rewriting it as a nested if then else. It is also a good practice to avoid the final elsif.
WHEN s0=>
if (FULL = '1') then -- Full Step
if (RIGHT = '1') then
state <= s2;
else
state <= s6;
end if;
else --Half step
if (RIGHT = '1') then
state <= s1;
else
state <= s7;
end if;
end if;
I like the active high checks since with VHDL-2008 once your synthesis tool supports it, you will be able to leave off the "= '1'". Ie:
if FULL then -- Full Step
if RIGHT then
Alternately you could concatenate them into a variable and and use a case statement. My suggestion is to always code for readability.