次のコードは、C 言語の字句認識エンジンです。
%{
#include <stdio.h>
void showToken(char*);
%}
%option yylineno
%option noyywrap
digit ([0-9])
letter ([a-zA-Z])
%%
letter(letter | digit)* showToken("id");
(digit)(digit)*(.(digit)(digit)*)? showToken("num");
[(),:;.] printf("%c",yytext[0]);
[ \n]
(==|<>|<|<=|>|>=) showToken("relop");
(+|-) showToken("addop");
(*|/) showToken("mulop");
(=) showToken("assign");
(&&) showToken("and");
(||) showToken("or");
(!) showToken("not");
. {
printf("Lexical Error");
exit(0);
}
%%
void showToken(char* name){
printf("<%s,%s>",name,yytext);
}
%%
次のエラーが表示されます。コードが正しく記述されていると思います。コードに多くの変更を加えましたが、コンパイルできません。
~/hedor>lex -t lexical.l > lexical.c
lexical.l:13: unrecognized rule
lexical.l:17: unrecognized rule
lexical.l:17: unrecognized rule
lexical.l:17: unrecognized rule
lexical.l:17: unrecognized rule
lexical.l:17: unrecognized rule
lexical.l:18: unrecognized rule
lexical.l:18: unrecognized rule
lexical.l:18: unrecognized rule
lexical.l:18: unrecognized rule
lexical.l:18: unrecognized rule
lexical.l:21: unrecognized rule
lexical.l:21: unrecognized rule
lexical.l:21: unrecognized rule
lexical.l:21: unrecognized rule