0

次のレクサーがあります。ID : [a-z][a-z0-9_]*;

1aまたはのような一致する識別子を除いてうまく機能しますが、または222z222のようなすべての数字ではありません。1999

では、問題を解決するにはどうすればよいでしょうか。

4

1 に答える 1

1

あなたのレクサーは[a-z][a-z0-9_]*. したがって、これは小文字で始まり、その後にゼロ個以上の小文字または数字またはアンダースコアが続くものと一致します

識別子を小文字または数字のいずれかで開始し、すべての数字で開始したくない場合は、次を試してください

[a-z][a-z0-9_]*;|[0-9]+[a-z_][a-z0-9_]*;  // Updated

それで2部構成になった

  • [a-z][a-z0-9_]*;: 小文字で始まる一致
  • [0-9]+[a-z_][a-z0-9_]*;: 数字で始まる場合、1 つ以上の数字の後に 1 つの文字またはアンダースコアがあり、その後に 0 個以上の文字、数字、またはアンダースコアが続くと想定されます。

と同じことが書けます([a-z]|[0-9]+[a-z_])[a-z0-9_]*;

于 2013-09-23T08:32:25.310 に答える