diff options
author | jacomi | 1999-01-25 18:35:13 +0000 |
---|---|---|
committer | jacomi | 1999-01-25 18:35:13 +0000 |
commit | ca51f6abf6debc1b6718f59129886fea04ee12b0 (patch) | |
tree | b074cbd71c73bfa0d39a28f73e19cd8d28a653f6 /src/gram.l | |
parent | f63e7d593f9a1ca8152ec8180ac052e75c892a60 (diff) | |
download | irbox-ca51f6abf6debc1b6718f59129886fea04ee12b0.zip irbox-ca51f6abf6debc1b6718f59129886fea04ee12b0.tar.gz irbox-ca51f6abf6debc1b6718f59129886fea04ee12b0.tar.bz2 irbox-ca51f6abf6debc1b6718f59129886fea04ee12b0.tar.xz |
new directory structure and data
Diffstat (limited to 'src/gram.l')
-rw-r--r-- | src/gram.l | 122 |
1 files changed, 122 insertions, 0 deletions
diff --git a/src/gram.l b/src/gram.l new file mode 100644 index 0000000..df54f34 --- /dev/null +++ b/src/gram.l @@ -0,0 +1,122 @@ +%{ + +/* + * + * IRBOX, an Ivy driver for infra-red remote controls + * + * Copyright 1998-1999 + * Centre d'Etudes de la Navigation Aerienne + * + * This is the lexical analyser for reading tables + * + * Authors: Stephane Chatty <chatty@cenatoulouse.dgac.fr> + * + * $Id$ + * + * Please refer to file version.h for the + * copyright notice regarding this software + */ + +#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); + } |