aboutsummaryrefslogtreecommitdiffstats
path: root/tools/lemon/lemonflex-tail.inc
diff options
context:
space:
mode:
Diffstat (limited to 'tools/lemon/lemonflex-tail.inc')
-rw-r--r--tools/lemon/lemonflex-tail.inc59
1 files changed, 59 insertions, 0 deletions
diff --git a/tools/lemon/lemonflex-tail.inc b/tools/lemon/lemonflex-tail.inc
new file mode 100644
index 0000000000..04eaf2ab2d
--- /dev/null
+++ b/tools/lemon/lemonflex-tail.inc
@@ -0,0 +1,59 @@
+/* $Id: lemonflex-tail.inc,v 1.1 2001/02/01 20:21:25 gram Exp $ */
+
+/* This file is #include'd at the bottom of a Lex/Flex scanner
+for use with the Lemon parser. You must have #define'd:
+
+MODNAME module name for creating function names:
+
+Prototypes:
+
+void MODNAME_scanner_text(char *text);
+void MODNAME_scanner_cleanup(void);
+int MODNAME_wrap(void);
+*/
+
+#include <cppmagic.h>
+
+#define TEXT_FUNC CONCAT(MODNAME,_scanner_text)
+#define FILE_FUNC CONCAT(MODNAME,_scanner_file)
+#define CLEANUP_FUNC CONCAT(MODNAME,_scanner_cleanup)
+#define WRAP_FUNC CONCAT(MODNAME,_wrap)
+
+
+/* Resets scanner and assigns the char* argument
+ * as the text to scan
+ */
+void
+TEXT_FUNC (const char *text)
+{
+ yy_scan_string(text);
+}
+
+void
+FILE_FUNC (FILE* fh)
+{
+ YY_BUFFER_STATE new_buffer;
+
+ new_buffer = yy_create_buffer(fh, YY_BUF_SIZE);
+ yy_switch_to_buffer(new_buffer);
+}
+
+void
+CLEANUP_FUNC (void)
+{
+ BEGIN(INITIAL);
+ yy_delete_buffer(YY_CURRENT_BUFFER);
+}
+
+/* Flex has an option '%option noyywrap' so that I don't have to
+ * provide this yywrap function, but in order to maintain portability,
+ * I'll just use this yywrap() function.
+ */
+int
+WRAP_FUNC ()
+{
+ return 1; /* stop at EOF, instead of looking for next file */
+}
+
+
+