diff --git a/parse.leg b/parse.leg index a8cf8a1..70bdcdc 100644 --- a/parse.leg +++ b/parse.leg @@ -551,12 +551,13 @@ int printCode(Node *node) printf(" , %i }}; \n",node->String.len); return thisNumber; } - case Query: - printVariableName(node->type,nodeCount,1); - printf("= { .Query = { Query, &"); - printVariableName(node->Query.children[0]->type,nodeCount,0); - printf(" }};\n"); - return 0; + case Query: { + int i = printCode(node->Query.children[0]); + int thisNumber=nodeNumber++; + printf("Node node%i",thisNumber); + printf("= { .Query = { Query, &node%i }};\n",i); + return thisNumber; + } case Star: { int i = printCode(node->Star.children[0]); int thisNumber=nodeNumber++; @@ -565,26 +566,24 @@ int printCode(Node *node) return thisNumber; } case Plus:{ - int i = printCode(node->Star.children[0]); + int i = printCode(node->Plus.children[0]); int thisNumber=nodeNumber++; printf("Node node%i = { .Plus = { Plus, &node%i }};\n",thisNumber,i); return thisNumber; } case Or:{ - int i = printCode(node->Star.children[0]); - int j = printCode(node->Star.children[1]); + int i = printCode(node->Or.children[0]); + int j = printCode(node->Or.children[1]); int thisNumber=nodeNumber++; printf("Node node%i= { .Or = { Or, &node%i",thisNumber,i); - thisNumber=nodeNumber++; printf(" , &node%i }};\n",j); return thisNumber; } case And:{ - int i = printCode(node->Star.children[0]); - int j = printCode(node->Star.children[1]); + int i = printCode(node->And.children[0]); + int j = printCode(node->And.children[1]); int thisNumber=nodeNumber++; printf("Node node%i= { .And = { And, &node%i",thisNumber,i); - thisNumber=nodeNumber++; printf(" , &node%i }};\n",j); return thisNumber; } @@ -599,17 +598,16 @@ int printCode(Node *node) return thisNumber; } case Exc:{ - int i = printCode(node->Star.children[0]); + int i = printCode(node->Exc.children[0]); int thisNumber=nodeNumber++; printf("Node node%i = { .Exc = { Exc, &node%i }};\n",thisNumber,i); - return 0; + return thisNumber; } case Et: - printVariableName(node->type,nodeCount,1); - printf("= { .Et = { Et, &"); - printVariableName(node->Et.children[0]->type,nodeCount,0); - printf(" }};\n"); - return 0; + int i = printCode(node->Et.children[0]); + int thisNumber=nodeNumber++; + printf("Node node%i = { .Et = { Et, &node%i }};\n",thisNumber,i); + return thisNumber; case Id: printVariableName(node->type,nodeCount,1); printf("= { .Id = { Id, symb");