From 3a37b8701cd3e0a86fef59910b20b2af7e4573f6 Mon Sep 17 00:00:00 2001 From: Carl Worth Date: Mon, 10 May 2010 11:44:09 -0700 Subject: [PATCH] Add the tiniest shell of a flex/bison-based parser. It doesn't really *do* anything yet---merlely parsing a stream of whitespace-separated tokens, (and not interpreting them at all). --- Makefile | 12 +++++++++++ glcpp-lex.l | 41 ++++++++++++++++++++++++++++++++++++ glcpp-parse.y | 57 +++++++++++++++++++++++++++++++++++++++++++++++++++ glcpp.c | 28 +++++++++++++++++++++++++ 4 files changed, 138 insertions(+) create mode 100644 Makefile create mode 100644 glcpp-lex.l create mode 100644 glcpp-parse.y create mode 100644 glcpp.c diff --git a/Makefile b/Makefile new file mode 100644 index 00000000000..d8357dda0f0 --- /dev/null +++ b/Makefile @@ -0,0 +1,12 @@ +glcpp: glcpp.o glcpp-lex.o glcpp-parse.o + +%.c %.h: %.y + bison --defines=$*.h --output=$*.c $^ + +%.c: %.l + flex --outfile=$@ $< + +glcpp-lex.c: glcpp-parse.h + +clean: + rm -f glcpp-lex.c glcpp-parse.c *.o *~ diff --git a/glcpp-lex.l b/glcpp-lex.l new file mode 100644 index 00000000000..9779f2b92e6 --- /dev/null +++ b/glcpp-lex.l @@ -0,0 +1,41 @@ +%{ +/* + * Copyright © 2010 Intel Corporation + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice (including the next + * paragraph) shall be included in all copies or substantial portions of the + * Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + */ + +#include +#include + +#include "glcpp-parse.h" +%} + +%option noyywrap + +%% + + /* Silently eat all whitespace. */ +[[:space:]]+ + + /* Any non-whitespace is a token. */ +[^[:space:]]+ { return TOKEN; } + +%% diff --git a/glcpp-parse.y b/glcpp-parse.y new file mode 100644 index 00000000000..739b2935b3f --- /dev/null +++ b/glcpp-parse.y @@ -0,0 +1,57 @@ +%{ +/* + * Copyright © 2010 Intel Corporation + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice (including the next + * paragraph) shall be included in all copies or substantial portions of the + * Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + */ + +#include +#include + +#define YYSTYPE int + +void +yyerror (const char *error); + +%} + +%token TOKEN + +%% + +input: /* empty */ + | tokens +; + + +tokens: token + | tokens token +; + +token: TOKEN +; + +%% + +void +yyerror (const char *error) +{ + fprintf (stderr, "Parse error: %s\n", error); +} diff --git a/glcpp.c b/glcpp.c new file mode 100644 index 00000000000..09641ceeadb --- /dev/null +++ b/glcpp.c @@ -0,0 +1,28 @@ +/* + * Copyright © 2010 Intel Corporation + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice (including the next + * paragraph) shall be included in all copies or substantial portions of the + * Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + */ + +int +main (void) +{ + return yyparse (); +} -- 2.30.2