diff options
author | Jakob Kaivo <jkk@ung.org> | 2019-03-13 22:03:41 -0400 |
---|---|---|
committer | Jakob Kaivo <jkk@ung.org> | 2019-03-13 22:03:41 -0400 |
commit | 90dd1b18f121b55463e785f65be4b8dfa696e600 (patch) | |
tree | 3e024db25b79b9c63bde47ae368488755a2195f9 /yacc.c |
Diffstat (limited to 'yacc.c')
-rw-r--r-- | yacc.c | 64 |
1 files changed, 64 insertions, 0 deletions
@@ -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; +} |