From 64a411ede2df42eea0e6905a4985a3e54057c677 Mon Sep 17 00:00:00 2001 From: Peter Mikkelsen Date: Tue, 29 Jun 2021 17:58:18 +0000 Subject: Parse terms in parenthesis correctly --- example.pl | 5 +++++ parser.c | 7 ++++++- 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/example.pl b/example.pl index 67c0db3..f5305d9 100644 --- a/example.pl +++ b/example.pl @@ -2,6 +2,11 @@ math(A,B,C,D) :- D is A + B + C * A. +parentest :- + 1 + 2 * 3 + 4. +parentest :- + (0 * (1 + 2) * 3) * 3 + 4. + true. likes(bob, ice). diff --git a/parser.c b/parser.c index fc77905..c4d860e 100644 --- a/parser.c +++ b/parser.c @@ -171,6 +171,11 @@ term(void) case CurlyBracketLeftTok: result = curlybracketterm(); break; + case ParenLeftTok: + match(ParenLeftTok); + result = fullterm(ParenRightTok, nil, nil); + match(ParenRightTok); + break; default: print("Cant parse term of token type %d\n", lookahead.tag); syntaxerror("term"); @@ -245,7 +250,7 @@ parseoperators(Term *list) for(i = 0, t = list; i < length; i++){ Operator *op = getoperator(t->text); - if(op){ + if(op && t->tag == AtomTok){ infos[i].type = op->type; infos[i].level = op->level; }else{ -- cgit v1.2.3