aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--test cases/frameworks/8 flex/lexer.l8
-rw-r--r--test cases/frameworks/8 flex/meson.build26
-rw-r--r--test cases/frameworks/8 flex/parser.y6
-rw-r--r--test cases/frameworks/8 flex/prog.c38
-rw-r--r--test cases/frameworks/8 flex/test.txt1
5 files changed, 79 insertions, 0 deletions
diff --git a/test cases/frameworks/8 flex/lexer.l b/test cases/frameworks/8 flex/lexer.l
new file mode 100644
index 0000000..85293b2
--- /dev/null
+++ b/test cases/frameworks/8 flex/lexer.l
@@ -0,0 +1,8 @@
+%{
+#include <stdlib.h>
+#include "parser.tab.h"
+%}
+
+%%
+("true"|"false") {return BOOLEAN;}
+. { yyerror(); }
diff --git a/test cases/frameworks/8 flex/meson.build b/test cases/frameworks/8 flex/meson.build
new file mode 100644
index 0000000..13ac9f6
--- /dev/null
+++ b/test cases/frameworks/8 flex/meson.build
@@ -0,0 +1,26 @@
+project('flex and bison', 'c')
+
+# The point of this test is that one generator
+# may output headers that are necessary to build
+# the sources of a different generator.
+
+flex = find_program('flex')
+bison = find_program('bison')
+
+lgen = generator(flex,
+output : '@PLAINNAME@.yy.c',
+arguments : ['-o', '@OUTPUT@', '@INPUT@'])
+
+lfiles = lgen.process('lexer.l')
+
+pgen = generator(bison,
+output : ['@BASENAME@.tab.c', '@BASENAME@.tab.h'],
+arguments : ['@INPUT@', '--defines=@OUTPUT1@', '--output=@OUTPUT0@'])
+
+pfiles = pgen.process('parser.y')
+
+e = executable('pgen', 'prog.c',
+lfiles, pfiles)
+
+test('parsertest', e)
+
diff --git a/test cases/frameworks/8 flex/parser.y b/test cases/frameworks/8 flex/parser.y
new file mode 100644
index 0000000..ff8754f
--- /dev/null
+++ b/test cases/frameworks/8 flex/parser.y
@@ -0,0 +1,6 @@
+%token BOOLEAN
+
+%%
+input:
+ BOOLEAN { $$ = $1;}
+;
diff --git a/test cases/frameworks/8 flex/prog.c b/test cases/frameworks/8 flex/prog.c
new file mode 100644
index 0000000..1e48f61
--- /dev/null
+++ b/test cases/frameworks/8 flex/prog.c
@@ -0,0 +1,38 @@
+#include"parser.tab.h"
+#include<unistd.h>
+#include<sys/types.h>
+#include<sys/stat.h>
+#include<fcntl.h>
+#include<stdio.h>
+#include<stdlib.h>
+
+int main(int argc, char **argv) {
+ /*
+ int input;
+ if(argc != 2) {
+ printf("%s <input file>");
+ return 1;
+ }
+ input = open(argv[1], O_RDONLY);
+ dup2(input, STDIN_FILENO);
+ close(input);
+ return yyparse();
+ */
+ /* We really should test that the
+ * generated parser works with input
+ * but it froze and I don't want to waste
+ * time debugging that. For this test what
+ * we care about is that it compiles and links.
+ */
+ void* __attribute__((unused)) dummy = (void*)yyparse;
+ return 0;
+}
+
+int yywrap(void) {
+ return 0;
+}
+
+int yyerror(void) {
+ printf("Parse error\n");
+ exit(1);
+}
diff --git a/test cases/frameworks/8 flex/test.txt b/test cases/frameworks/8 flex/test.txt
new file mode 100644
index 0000000..27ba77d
--- /dev/null
+++ b/test cases/frameworks/8 flex/test.txt
@@ -0,0 +1 @@
+true