diff options
author | chatty | 1999-01-19 13:07:40 +0000 |
---|---|---|
committer | chatty | 1999-01-19 13:07:40 +0000 |
commit | a9a15b453b5dcca597fa4aeee5a2376ce1154b15 (patch) | |
tree | 827650e3958849146e821e7d56846e9f50a26f0b /gram.l | |
parent | d5c5e0bcd952c2b58fd02409d01b10da83872ef0 (diff) | |
download | irbox-a9a15b453b5dcca597fa4aeee5a2376ce1154b15.zip irbox-a9a15b453b5dcca597fa4aeee5a2376ce1154b15.tar.gz irbox-a9a15b453b5dcca597fa4aeee5a2376ce1154b15.tar.bz2 irbox-a9a15b453b5dcca597fa4aeee5a2376ce1154b15.tar.xz |
Added grammar and management of translation tables for events
irbox.c -> irman.c
Diffstat (limited to 'gram.l')
-rw-r--r-- | gram.l | 113 |
1 files changed, 113 insertions, 0 deletions
@@ -0,0 +1,113 @@ +%{ +/* + * This is a lexical analyzer + * + * It comes with an associated grammar. + * + * + * + */ + +#include <stdio.h> +#include <string.h> +#include <stdio.h> + +/* 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); + } |