From a9a15b453b5dcca597fa4aeee5a2376ce1154b15 Mon Sep 17 00:00:00 2001 From: chatty Date: Tue, 19 Jan 1999 13:07:40 +0000 Subject: Added grammar and management of translation tables for events irbox.c -> irman.c --- gram.l | 113 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 113 insertions(+) create mode 100644 gram.l (limited to 'gram.l') diff --git a/gram.l b/gram.l new file mode 100644 index 0000000..95ddf1d --- /dev/null +++ b/gram.l @@ -0,0 +1,113 @@ +%{ +/* + * This is a lexical analyzer + * + * It comes with an associated grammar. + * + * + * + */ + +#include +#include +#include + +/* header produced from the parser file with '-d' option of yacc */ +#include "y.tab.h" + +extern int tee (int); +#define RETURN(x) return (tee(x)) + + + +const char* ResWords [] = { + "type", + "name", + "brand", + 0 +}; + +const int ResWordsTokens [] = { + Y_TYPE, + Y_NAME, + Y_BRAND +}; + +int LineNo = 1; + +void +LexInit () +{ + +#ifdef FLEX_SCANNER +static void yyrestart (FILE*); +// yyrestart (0); +#endif + LineNo = 1; +} + + +int +CheckResWord (const char* s) +{ + const char** pp = ResWords; + while (*pp) { + if (strcmp (*pp, s) == 0) + return pp - ResWords; + ++pp; + } + return -1; +} + + +%} + + + +Int [-]?[0-9]+ +Ident [a-zA-Z/\[\]][a-zA-Z.0-9/\[\]]* +nl [\n] +sp0 [ \t]* +sp1 [ \t]+ + +%% + +[:] RETURN (yytext[0]); + +\#.*\n { /* comments */ + ++LineNo; + } + +\".*\" { + char* n = strdup (yytext+1); + n[strlen(yytext) - 1] = '\0'; + yylval.name = n; + RETURN (Y_STRING); + } + +{sp1} {} + +{nl} { + ++LineNo; + RETURN (Y_EOL); + } + +{Int} { + yylval.integer = atoi (yytext); + RETURN (Y_INT); + } + + +{Ident} { + int index = CheckResWord (yytext); + if (index >= 0) { + RETURN (ResWordsTokens[index]); + } else { + yylval.name = strdup (yytext); + RETURN (Y_ID); + } + } + +. { + RETURN (-1); + } -- cgit v1.1