-1

私はスキャナーであるプログラムを担当しています。私のアルファベットは次のとおりです。

all english letters (upper and lower), digits, 
plus the extra character _ (underscore) & ws. Identifier begins with a letter and can 
continue with any number of letters, digits or _ up to 10 significant characters.

テーブルが正しいことを確認したいです。何らかの理由で、スキャナーがアンダースコアを処理できません。文字と数字で機能させることができます。問題を絞り込もうとしていますが、それがテーブルではないことを確認したいと考えています。

ここに私のテーブルがあります、ほんの一部です:

// state token      ws    L   D   _   
 {   0,  0,         0,    1, 11,  21, 
 {   1,  id_tk,    -1,    2,  2,   2,
 {   2,  id_tk,    -1,    3,  3,   3,
 {   3,  id_tk,    -1,    4,  4,   4,
 {   4,  id_tk,    -1,    5,  5,   5,
 {   5,  id_tk,    -1,    6,  6,   6,
 {   6,  id_tk,    -1,    7,  7,   7,
 {   7,  id_tk,    -1,    8,  8,   8,
 {   8,  id_tk,    -1,    9,  9,   9,
 {   9,  id_tk,    -1,   10, 10,  10,
 { 10, id_tk,      -1,   -2, -2,  -2,
 { 11, num_tk,     -1,   -1, 12,  -2,
 { 12, num_tk,     -1,   -1, 13,  -2,
 { 13, num_tk,     -1,   -1, 14,  -2,
 { 14, num_tk,     -1,   -1, 14,  -2,
 { 15, num_tk,     -1,   -1, 15,  -2,
 { 16, num_tk,     -1,   -1, 16,  -2,
 { 17, num_tk,     -1,   -1, 17,  -2,
 { 18, num_tk,     -1,   -1, 18,  -2,
 { 19, num_tk,     -1,   -1, 19,  -2,
 { 20, num_tk,     -1,   -1, 20,  -2,
 { 21, undrs_tk,   -1,   -2, -2,  -2,

凡例は次のとおりです。

WS = whitespace
L = letter
D = digit
_ = underscore

-1 = final state
-2 = error state

この表は、上記のアルファベットで正しいですか? 本当に助かります。ありがとう

4

1 に答える 1

1

あなたの仕様では、識別子には10個の有効な文字があると書かれています。これは通常、識別子が長くなる可能性があることを意味し、比較のために10を超える文字は無視されます。オートマトンは、10 文字を超える識別子を拒否します。

あなたの仕様は num_tk と undrs_tk がどうあるべきかを指定していないので、それらについてコメントすることはできません.

表内のアンダースコアの処理に明らかな問題はありません。動作しない場合は、表示されていないドライバー コードに問題がある可能性があります。

于 2013-11-04T08:42:01.687 に答える