From 48ea6f527aa361151cad58664de35a531c7a3b20 Mon Sep 17 00:00:00 2001 From: "benoit.thomas" Date: Mon, 12 Jul 2021 23:53:39 +0900 Subject: [PATCH] =?UTF-8?q?Mise=20=C3=A0=20jour=20de=20'parse.leg'?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- parse.leg | 24 ++++++++++++++---------- 1 file changed, 14 insertions(+), 10 deletions(-) diff --git a/parse.leg b/parse.leg index 64fd7ef..8e6cdde 100644 --- a/parse.leg +++ b/parse.leg @@ -249,7 +249,7 @@ Symbol *intern(char *name){ } -int binary_search(SymbolTable *st, char *c){ +/*int binary_search(SymbolTable *st, char *c){ int start=0,end=st->length-1; int m=0; while(end-start>1){ @@ -275,10 +275,10 @@ int binary_search(SymbolTable *st, char *c){ return end; } -} +}*/ -void addSymbol(SymbolTable *symbolTable, Symbol *symbol) { +/*void addSymbol(SymbolTable *symbolTable, Symbol *symbol) { if(symbolTable->length==0){ @@ -301,22 +301,23 @@ void addSymbol(SymbolTable *symbolTable, Symbol *symbol) { } -} +}*/ -void setRule(SymbolTable *symbolTable, char *name, Node *rule) { - for (int i= 0; i < symbolTable->length;i++) { +void setRule(char *name, Node *rule) { + intern(name)->rule= rule; + /*for (int i= 0; i < symbolTable->length;i++) { if (strcmp(symbolTable->elements[i]->name, name) == 0) { symbolTable->elements[i]->rule= rule; break; } - } + }*/ } -void arrayAppend(Array *array, Node *statement) { +/*void arrayAppend(Array *array, Node *statement) { array->length++; array->elements= realloc(array->elements,sizeof(Node*) * array->length); array->elements[array->length-1] = statement; - } + }*/ #define YYSTYPE Node * @@ -326,7 +327,9 @@ YYSTYPE yylval = 0; start = declaration+ -declaration = i:id '=' - e:expression { setRule(&symbolTable,get(i, Id, symbol)->name, e) } +declaration = i:id '=' - e:expression { setRule(get(i, Id, symbol)->name, e) } + +expression = or or = a:and - "|" - o:or {$$ = mkOr(o, a) } | a:and { $$ = a } @@ -435,6 +438,7 @@ int execute(Node *node, InputBuffer *in) } case Id: { Symbol *symbol= get(node, Id, symbol); + if (0 == symbol->rule) { printf("undefined rule: %s\n", symbol->name); } return execute(symbol->rule, in); } }