ソースを参照

Mise à jour de 'parse.leg'

main
コミット
48ea6f527a
1個のファイルの変更14行の追加10行の削除
  1. +14
    -10
      parse.leg

+ 14
- 10
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);
}
}

読み込み中…
キャンセル
保存