ML-Lex でトークナイザーを作成していますが、その定義の一部は次のとおりです。
datatype lexresult = STRING
| STRINGOP
| EOF
val error = fn x => TextIO.output(TextIO.stdOut,x ^ "\n")
val eof = fn () => EOF
%%
%structure myLang
digit=[0-9];
ws=[\ \t\n];
str=\"[.*]+\";
strop=\[[0-9...?\^]\];
%s alpha;
alpha=[a-zA-Z];
%%
<alpha> {alphanum}+ => (ID);
. => (error ("myLang: ignoring bad character " ^ yytext); lex());
タイプIDが「alpha」で始まるか、後に見つかった場合にのみ、タイプIDを検出する必要があります。私はそれを次のように書くことを知っています
{alpha}+ {alphanum}* => (ID);
はオプションですが、他の目的でも開始状態を使用する方法を学ぶ必要があります。誰かがこれについて私を助けてくれますか?