How about something like the following?
Attacking Rules
"Attacking Rules"
Dojo is a room.
The block attacking rule does nothing.
Understand "attack" as attacking.
A target is here.
Before doing anything:
now implicit action is the waiting action.
Carry out attacking something:
now the noun is off-stage.
Report attacking something:
say "You break [the noun] apart with your bare hands."
An apple is here.
After attacking the apple:
say "You mash [the noun] to pulp."
A boulder is here.
Instead of attacking the boulder:
say "You'd rather keep your hands intact."
Instead of attacking yourself:
say "Um, no."
Targeting is a rulebook producing an object.
First targeting:
now implicit action is the waiting action.
Targeting when the player can see the target:
rule succeeds with result target.
Targeting when the player can see the apple:
rule succeeds with result apple.
Last Targeting:
say "What do you want to attack?";
now implicit action is the attacking action.
Rule for supplying a missing noun while attacking:
let target be the object produced by the targeting rules;
now the noun is target.
Implicit action is initially the waiting action.
Noun naming is an action applying to one thing. Understand "[thing]" as noun naming when implicit action is not the waiting action.
Before noun naming:
convert to implicit action on the noun.
Rule for printing a parser error when the latest parser error is the not a verb I recognise error and implicit action is the attacking action:
say "I don't see any such target. Try again."
Test attacks with "attack / attack / attack / boulder / me / attack boulder / attack / darkness / me / attack / jump".
which yields:
>[1] attack
You break the target apart with your bare hands.
>[2] attack
You mash the apple to pulp.
>[3] attack
What do you want to attack?
>[4] boulder
You'd rather keep your hands intact.
>[5] me
I didn't understand that sentence.
>[6] attack boulder
You'd rather keep your hands intact.
>[7] attack
What do you want to attack?
>[8] darkness
I don't see any such target. Try again.
>[9] me
Um, no.
>[10] attack
What do you want to attack?
>[11] jump
You jump on the spot.