-1
スキャナ(Flexを使用して実装されている)が一度にすべてのトークンを認識しないパーサーを実装しています。入力から最初のトークンを取り出して終了するだけです。誰かが私を助けてくださいこれを整理することができます。ここに私の ".lex" ファイルです:私はabc;
として入力を与えるたとえばFlexでのトークン認識エラー
%{
/* need this for the call to atof() below */
#include <math.h>
#include<string.h>
#include "parser.h"
#include "idf.tab.h"
char findname (char *yytext) { return yytext[0]; }
%}
DIGIT [0-9]
ID [a-zA-Z]*
%option noyywrap
%%
{ID} |
-?{DIGIT}+"."{DIGIT}* |
-?{DIGIT}+ { printf("ID or number:%s\n",yytext); /*yylval.a_variable = (char*)findname(yytext);*/ return TOKID;}
";" { printf("Semicolon\n"); return TOKSEMICOLON; }
":" { printf("Colon\n"); return TOKCOLON;}
"," return TOKCOMMA;
"." return TOKDOT;
"-" return TOKMINUS;
[ \t\n] /* eat up whitespace */
. return TOKUNRECOG;
%%
int main(int argc,char* argv[])
{
++argv, --argc;
if (argc > 0)
yyin = fopen(argv[0], "r");
else
yyin = stdin;
yylex();
}
、期待される出力は次のようになります。
ID or number: abc
Semicolon
しかし、実際の出力は次のようになります。
ID or number: abc
つまり、最初のトークンabcを認識し、セミコロンを認識せずに終了するだけです。次いで、出力はちょうど;
で入力された場合、一方
Semicolon
プログラムのようなサウンドは、あなたが指定したものを正確に実行しています - それは 'yylex'を呼び出して1つのトークンを読み終えます。 –