diff options
author | Peter Mikkelsen <peter@pmikkelsen.com> | 2021-07-03 18:58:07 +0000 |
---|---|---|
committer | Peter Mikkelsen <peter@pmikkelsen.com> | 2021-07-03 18:58:07 +0000 |
commit | 7db38904537603dabe960f32fa505e27db89e27b (patch) | |
tree | 46ea8abfcc0656a7442363979838f5fa8f9c95a5 /parser.c | |
parent | d81447526cde6fa98dfa792a65f71acb78ef1398 (diff) |
Start adding support for read_term and write_term
Diffstat (limited to 'parser.c')
-rw-r--r-- | parser.c | 28 |
1 files changed, 17 insertions, 11 deletions
@@ -79,14 +79,18 @@ void syntaxerror_parser(char *); Term *prologtext(int); Term * -parse(int fd, int querymode) +parse(int fd, Biobuf *bio, int querymode) { - fd = dup(fd, -1); - parsein = Bfdopen(fd, OREAD); - if(parsein == nil){ - print("Could not open file\n"); - return nil; - } + if(bio == nil){ + fd = dup(fd, -1); + parsein = Bfdopen(fd, OREAD); + if(parsein == nil){ + print("Could not open file\n"); + return nil; + } + }else + parsein = bio; + initgoals = nil; initoperators(); nexttoken(); @@ -96,7 +100,9 @@ parse(int fd, int querymode) uvlong id = 1; result = copyterm(result, &id); } - Bterm(parsein); + if(!bio) + Bterm(parsein); + return result; } @@ -118,7 +124,7 @@ prologtext(int querymode) if(t->tag == CompoundTerm && runestrcmp(t->text, L":-") == 0 && t->arity == 1){ Term *body = t->children; - print("Got directive: %S\n", prettyprint(body)); + print("Got directive: %S\n", prettyprint(body, 0, 0, 0)); if(body->tag == CompoundTerm && body->arity == 1 && runestrcmp(body->text, L"initialization") == 0){ Term *tmp = initgoals; initgoals = body->children; @@ -296,7 +302,7 @@ parseoperators(Term *list) if(index == -1){ print("Can't parse, list of length %d contains no operators: ", length); for(i = 0; i < length; i++) - print("%S(%d) ", prettyprint(terms[i]), infos[i].level); + print("%S(%d) ", prettyprint(terms[i], 0, 0, 0), infos[i].level); print("\n"); syntaxerror_parser("parseoperators"); } @@ -337,7 +343,7 @@ parseoperators(Term *list) terms[i] = terms[i+1]; } }else{ - print("Parse error when parsing operator %S (prefix=%d, postfix=%d, infix=%d level=%d)\n", prettyprint(terms[index]), prefixlevel, postfixlevel, infixlevel, infos[index].level); + print("Parse error when parsing operator %S (prefix=%d, postfix=%d, infix=%d level=%d)\n", prettyprint(terms[index], 0, 0, 0), prefixlevel, postfixlevel, infixlevel, infos[index].level); syntaxerror_parser("parseoperators"); } } |