%{ #include "trans.h" #include "gram.h" char *file_name = ""; int input_line = 1; #define isws(c) ((c)==' ' || (c)=='\t') %} MWS [ \t]* WS [ \t]+ %% #.*\n input_line++; ^[nN][oO][dD][eE] return NODE; ^[pP][oO][sS] return POS; ^[eE][nN][dD]{MWS} return END; ^[mM][eE][aA][nN][iI][nN][gG] return MEANING; ^[aA][lL][iI][aA][sS] return ALIAS; ^[aA][nN][tT] return ANT; ^[tT][oO][pP][iI][cC] return TOPIC; ^[fF][oO][rR][mM][sS] return FORMS; ^[xX][rR][eE][fF] return XREF; \n input_line++; {WS}[^\n]+\n { char *p, *q; for (p = yytext + yyleng - 1; p > yytext && isspace(*p); p--) ; p[1] = 0; input_line++; yylval.string = yytext+1; return STRING; } . { fprintf (stderr, "%s:%d: stray character %c\n", file_name, input_line, yytext[0]); exit(1); } %% void open_input(char *name) { yyin = fopen(name, "r"); if (!yyin) { fprintf (stderr, "cannot open "); perror (name); exit (1); } file_name = name; }