diff options
| author | Jussi Pakkanen <jpakkane@gmail.com> | 2014-08-25 21:23:03 +0300 |
|---|---|---|
| committer | Jussi Pakkanen <jpakkane@gmail.com> | 2014-08-25 21:23:03 +0300 |
| commit | 8d45972ee3fedf5dc82be5d6801b4c61367acac9 (patch) | |
| tree | 16cc9411ea61a49d87f2a722c14d512220edaa09 /test cases/frameworks | |
| parent | ccf63459c6c9090518ce9164c67bc12de010bc21 (diff) | |
| download | meson-8d45972ee3fedf5dc82be5d6801b4c61367acac9.tar.gz | |
Add flex+bison test case.
Diffstat (limited to 'test cases/frameworks')
| -rw-r--r-- | test cases/frameworks/8 flex/lexer.l | 8 | ||||
| -rw-r--r-- | test cases/frameworks/8 flex/meson.build | 26 | ||||
| -rw-r--r-- | test cases/frameworks/8 flex/parser.y | 6 | ||||
| -rw-r--r-- | test cases/frameworks/8 flex/prog.c | 38 | ||||
| -rw-r--r-- | test cases/frameworks/8 flex/test.txt | 1 |
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 000000000..85293b2aa --- /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 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<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 000000000..27ba77dda --- /dev/null +++ b/test cases/frameworks/8 flex/test.txt @@ -0,0 +1 @@ +true |
