From cf27c2e715812460356e959acf751f5e311fcc19 Mon Sep 17 00:00:00 2001 From: Johan Danielsson Date: Tue, 17 Feb 1998 15:04:10 +0000 Subject: [PATCH] A somewhat stricter grammar. Put everything in a linked list, and generate files after parsing (so there won't be any half written files). git-svn-id: svn://svn.h5l.se/heimdal/trunk/heimdal@4429 ec53bebd-3082-4978-b11e-865c3cabbd6b --- lib/com_err/parse.y | 58 ++++++++++++++++++++++++++------------------- 1 file changed, 33 insertions(+), 25 deletions(-) diff --git a/lib/com_err/parse.y b/lib/com_err/parse.y index 4a4540d78..7af496063 100644 --- a/lib/com_err/parse.y +++ b/lib/com_err/parse.y @@ -42,6 +42,8 @@ RCSID("$Id$"); void yyerror (char *s); long name2number(const char *str); + +extern char *yytext; %} %union { @@ -56,20 +58,25 @@ long name2number(const char *str); %% file : /* */ - | statements + | header statements end ; -statements : statement - | statements statement +header : id et + | et ; -statement : ET STRING +id : ID STRING + { + id_str = $2; + } + ; + +et : ET STRING { base = name2number($2); strncpy(name, $2, sizeof(name)); name[sizeof(name) - 1] = '\0'; free($2); - prologue(); } | ET STRING STRING { @@ -78,18 +85,16 @@ statement : ET STRING name[sizeof(name) - 1] = '\0'; free($2); free($3); - prologue(); } - | INDEX NUMBER + ; + +statements : statement + | statements statement + ; + +statement : INDEX NUMBER { - for(; number < $2; number++) { - /* - fprintf(h_file, "\t%s_ERROR_%d = %d,\n", - name, number, base + number); - */ - fprintf(c_file, "\t/* %03d */ \"Reserved %s error (%d)\",\n", - number, name, number); - } + number = $2; } | PREFIX STRING { @@ -105,18 +110,21 @@ statement : ET STRING } | EC STRING ',' STRING { - fprintf(h_file, "\t%s%s = %d,\n", - prefix ? prefix : "", $2, number + base); - fprintf(c_file, "\t/* %03d */ \"%s\",\n", number, $4); - free($2); - free($4); + struct error_code *ec = malloc(sizeof(*ec)); + ec->number = number; + if(prefix && *prefix != '\0') { + ec->name = malloc(strlen(prefix) + strlen($2) + 1); + strcpy(ec->name, prefix); + strcat(ec->name, $2); + free($2); + } else + ec->name = $2; + ec->string = $4; + APPEND(codes, ec); number++; } - | ID STRING - { - id_str = $2; - } - | END + ; +end : END { return; }