You can interrupt the "say" command with Command-Period when the script is running in the foreground (on the main thread).
By default, when you run scripts inside Script Editor they're run in the background so you can continue to interact with Script Editor while scripts are running—and you can run multiple scripts simultaneously. To force Script Editor to run scripts in the foreground, press the Control modifier key so the Script > Run command becomes Run in Foreground.
Note that Script Editor is primarily intended as a development environment rather than the normal way to run scripts once they're written and tested. You should typically either save scripts as applications or invoke them from the system Script menu (or similar mechanisms). When run that way, they are run in the foreground and Command-Period will interrupt scripts on a more fine-grained basis.
Also note that even if you interrupt the "say" command, the speech itself continues, since speech synthesis is performed in another process while the "say" command waits for it to complete. Interrupting "say" just stops it waiting for the speech to finish. If you want to explicitly stop the speech in response to Command-Period, catch the "user canceled" error (-128) produced by Command-Period and then tell "say" to stop any current speech:
try
say "A long speech message that you can stop midway through."
on error number -128
say "" with stopping current speech
end try
--
Chris Page
The other, other AppleScript Chris