3

私には4つのルールがあります

rule1: match variable 
rule2: match Float 
rule3: match Integer 
rule4: [ \t] ; //skipping space, tabs 
rule5: \n ;

ここで、ID、Float、Integer 以外のエラーを一致させるためのルールが必要です。たとえば、「&^()>~....」

これが私が作成したルールです。

. {   printf("found an error:%s\n",yytext);
      err_count++;
}

しかし、何か問題があります。スキャナーが次の行にジャンプするたびに、未知のトークンをキャッチします。

私の入力:

12+32+22:18,18
99558^8*6
15.~646(5
My output

    Found a number:12
    Found a error:+
    Found a number:32
    Found a error:+
    Found a number:22
    Found a error::
    Found a number:18
    Found a error:,
    Found a number:18
    Found a error:
    Found a number:99558
    Found a error:^
    Found a number:8
    Found a error:*
    Found a number:6
    Found a error:
    Found a float:15.
    Found a error:~
    Found a number:646
    Found a error:(
    Found a number:5

デバッグ目的で、角かっこで囲んでトークンを見つけようとします

. {
        printf("Found a error:[%s]\n",yytext);
        err_count++;
        }

bash show:
    Found a number:12
    Found a error:[+]
    Found a number:32
    Found a error:[+]
    Found a number:22
    Found a error:[:]
    Found a number:18
    Found a error:[,]
    Found a number:18
    ]ound a error:[
    Found a number:99558
    Found a error:[^]
    Found a number:8
    Found a error:[*]
    Found a number:6
    ]ound a error:[
    Found a float:15.
    Found a error:[~]
    Found a number:646
    Found a error:[(]
    Found a number:5

 redirect output to a txt file
    Found a number:12
    Found a error:[+]
    Found a number:32
    Found a error:[+]
    Found a number:22
    Found a error:[:]
    Found a number:18
    Found a error:[,]
    Found a number:18
    Found a error:[
    ]
    Found a number:99558
    Found a error:[^]
    Found a number:8
    Found a error:[*]
    Found a number:6
    Found a error:[
    ]
    Found a float:15.
    Found a error:[~]
    Found a number:646
    Found a error:[(]
    Found a number:5

問題の原因を知っている人はいますか? ありがとう ルール 5: \n ; 正常に動作しています。これが証拠です

I add print to rule5"\n { printf("newline\n"); 

redirect output to a txt file
Found a number:12
Found a error:[+]
Found a number:32
Found a error:[+]
Found a number:22
Found a error:[:]
Found a number:18
Found a error:[,]
Found a number:18
Found a error:[
]
newline
Found a number:99558
Found a error:[^]
Found a number:8
Found a error:[*]
Found a number:6
Found a error:[
]
newline
Found a float:15.
Found a error:[~]
Found a number:646
Found a error:[(]
Found a number:5
Found a error:[
]
newline
Found a variable:T189_10
Found a error:[@]
Found a float:12.2
Found a error:[
]
newline
Found a number:1
Found a variable:ABB21u
Found a error:[=]
Found a variable:ier_
Found a error:[
]
newline
Found a error:[$]
Found a error:[%]
Found a error:[^]
4

1 に答える 1

2

改行文字 (\r) を探す必要があります。Windows システムでは、Return ボタンを押したときに 2 文字を挿入するのが一般的ですか。2 文字は、改行 (\n) と改行 (\r) です。このように:

rule4: [ \t\r]

そしてそれはうまくいくでしょう。

于 2012-11-25T14:37:40.043 に答える