summaryrefslogtreecommitdiff
path: root/src/gram.l
diff options
context:
space:
mode:
authorjacomi1999-01-25 18:35:13 +0000
committerjacomi1999-01-25 18:35:13 +0000
commitca51f6abf6debc1b6718f59129886fea04ee12b0 (patch)
treeb074cbd71c73bfa0d39a28f73e19cd8d28a653f6 /src/gram.l
parentf63e7d593f9a1ca8152ec8180ac052e75c892a60 (diff)
downloadirbox-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.l122
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);
+ }