From 8d45972ee3fedf5dc82be5d6801b4c61367acac9 Mon Sep 17 00:00:00 2001 From: Jussi Pakkanen Date: Mon, 25 Aug 2014 21:23:03 +0300 Subject: Add flex+bison test case. --- test cases/frameworks/8 flex/lexer.l | 8 +++++++ test cases/frameworks/8 flex/meson.build | 26 ++++++++++++++++++++++ test cases/frameworks/8 flex/parser.y | 6 +++++ test cases/frameworks/8 flex/prog.c | 38 ++++++++++++++++++++++++++++++++ test cases/frameworks/8 flex/test.txt | 1 + 5 files changed, 79 insertions(+) create mode 100644 test cases/frameworks/8 flex/lexer.l create mode 100644 test cases/frameworks/8 flex/meson.build create mode 100644 test cases/frameworks/8 flex/parser.y create mode 100644 test cases/frameworks/8 flex/prog.c create mode 100644 test cases/frameworks/8 flex/test.txt diff --git a/test cases/frameworks/8 flex/lexer.l b/test cases/frameworks/8 flex/lexer.l new file mode 100644 index 000000000..85293b2aa --- /dev/null +++ b/test cases/frameworks/8 flex/lexer.l @@ -0,0 +1,8 @@ +%{ +#include +#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 000000000..13ac9f634 --- /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 000000000..ff8754f32 --- /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 000000000..1e48f611c --- /dev/null +++ b/test cases/frameworks/8 flex/prog.c @@ -0,0 +1,38 @@ +#include"parser.tab.h" +#include +#include +#include +#include +#include +#include + +int main(int argc, char **argv) { + /* + int input; + if(argc != 2) { + printf("%s "); + 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 000000000..27ba77dda --- /dev/null +++ b/test cases/frameworks/8 flex/test.txt @@ -0,0 +1 @@ +true -- cgit v1.2.3