diff options
-rw-r--r-- | Makefile | 12 | ||||
-rw-r--r-- | liby.c | 17 | ||||
-rw-r--r-- | yacc.c | 64 |
3 files changed, 93 insertions, 0 deletions
diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..cd9a3e1 --- /dev/null +++ b/Makefile @@ -0,0 +1,12 @@ +.POSIX: + +CFLAGS=-D_XOPEN_SOURCE=700 -g + +all: yacc liby.a + +yacc: yacc.c + +liby.a: liby.a(liby.o) + +clean: + rm -f yacc *.o *.a @@ -0,0 +1,17 @@ +#include <stdio.h> +#include <locale.h> + +extern int yyparse(void); + +int yyerror(const char *s) +{ + fprintf(stderr, "%s\n", s); + return 0; +} + +int main(int argc, char *argv[]) +{ + setlocale(LC_ALL, ""); + yyparse(); + return 0; +} @@ -0,0 +1,64 @@ +#include <stdio.h> +#include <string.h> +#include <unistd.h> + +#define C_ID_FIRSTCHAR "_abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ" + +int main(int argc, char *argv[]) +{ + char *fileprefix = "y"; + char *symbolprefix = "yy"; + int header = 0; + int lines = 1; + int debug = 0; + int verbose = 0; + int c; + + while ((c = getopt(argc, argv, "bdlptv")) != -1) { + switch (c) { + case 'b': + /* Change file prefix */ + fileprefix = optarg; + break; + + case 'd': + /* Write a header file */ + header = 1; + break; + + case 'l': + /* Omit #line directives */ + lines = 0; + break; + + case 'p': + /* Change symbol prefix */ + symbolprefix = optarg; + if (!strchr(C_ID_FIRSTCHAR, *symbolprefix)) { + printf("'%s' is not a valid prefix\n", optarg); + return 1; + } + break; + + case 't': + /* Include debugging code */ + debug = 1; + break; + + case 'v': + /* Output a description file */ + verbose = 1; + break; + + default: + return 1; + } + } + + if (optind != argc - 1) { + fprintf(stderr, "Must specify exactly one grammar file\n"); + return 1; + } + + return 0; +} |