0
我已經鑄成法文件,如下所示它:如何檢查輸入法作爲一個單一的輸入
%%
[\t\n]
"if" {printf("IF_TOKEN\n");}
"else" {printf("ELSE_TOKEN\n");}
"while" {printf("WHILE_TOKEN\n");}
"FOR" {printf("FOR_TOKEN\n");}
"BREAK" {printf("BREAK_TOKEN\n");}
"float" {printf("FLOAT_TOKEN\n");}
"int" {printf("INT_TOKEN\n");}
"long" {printf("LONG_TOKEN\n");}
"return" {printf("RETURN_TOKEN\n");}
"defFunction" {printf("DEFFUNCTION_TOKEN\n");}
"defClass" {printf("DEFCLASS_TOKEN\n");}
"\(" {printf("PAROPEN_TOKEN\n");}
"\)" {printf("PARCLOS_TOKEN\n");}
"\{" {printf("CBROPEN_TOKEN\n");}
"\}" {printf("CBRCLOS_TOKEN\n");}
"<" {printf("LESSTHN_TOKEN\n");}
">" {printf("GRTRTHN_TOKEN\n");}
"=" {printf("EQUALTO_TOKEN\n");}
"!=" {printf("NEQUALTO_TOKEN\n");}
"\+" {printf("SUM_TOKEN\n");}
"-" {printf("MINUS_TOKEN\n");}
"\*" {printf("STAR_TOKEN\n");}
"\/" {printf("SLASH_TOKEN\n");}
"%" {printf("REMAIN_TOKEN\n");}
"\[" {printf("BRAOPEN_TOKEN\n");}
"\]" {printf("BRACLOS_TOKEN\n");}
";" {printf("SEMICOL_TOKEN\n");}
[-]?[1-9][0-9]* {printf("NUMBER\n");}
[A-Za-z&_$][A-Za-z$_]* {printf("ID\n");}
. {printf("ERROR");}
%%
int yywrap (void) {
return 1;
}
int main (int argc, char** argv) {
yylex();
return 0;
}
,如果我給125apple作爲輸入這個文件法編譯.L文件後,應該打印錯誤,但它打印 NUMBER ID 我怎樣才能給125apple作爲單一的輸入?
它應該是一個錯誤,因爲我想我的變量couldnt可以開始與數字。當我給emad /作爲輸入,它給了我ID SLASH_TOKEN和所有格式。我不認爲它應該有必要寫錯誤模式對於所有這些格式,我應該如何?如果我可以說每個沒有空間的輸入都是單個輸入,它應該正常工作 – EmadSmart
@EmadSmart:您的選擇。 「因爲我想要它」是一個完全有效的解釋。請記住,下次你問自己爲什麼你使用的某種語言的工作原理:) – rici
這僅僅是爲了我的學習,它不是一種真正的語言,125e也不能成爲一個有效的變量名C++,可以嗎? – EmadSmart