From 0c22d3d73005e7b956742bd5fc75f183b8784989 Mon Sep 17 00:00:00 2001 From: Peter Mikkelsen Date: Tue, 20 Jul 2021 22:28:46 +0000 Subject: Add a bit of a hack to the parser so it can parse (a) op arg when a is an operator --- dat.h | 1 + misc.c | 1 + parser.c | 3 ++- 3 files changed, 4 insertions(+), 1 deletion(-) diff --git a/dat.h b/dat.h index d634435..72a95b5 100644 --- a/dat.h +++ b/dat.h @@ -29,6 +29,7 @@ struct Term vlong ival; double dval; uvlong clausenr; + int inparens; /* kinda bad hack needed for the current parser */ }; struct Binding diff --git a/misc.c b/misc.c index fd74a82..f25c583 100644 --- a/misc.c +++ b/misc.c @@ -53,6 +53,7 @@ mkterm(int tag) t->children = nil; t->text = nil; t->clausenr = 0; + t->inparens = 0; return t; } diff --git a/parser.c b/parser.c index a2b045e..3d2bf6f 100644 --- a/parser.c +++ b/parser.c @@ -171,6 +171,7 @@ term(void) case ParenLeftTok: match(ParenLeftTok); result = fullterm(ParenRightTok, nil, nil); + result->inparens = 1; match(ParenRightTok); break; case StringTok: @@ -251,7 +252,7 @@ parseoperators(Term *list) for(i = 0, t = list; i < length; i++){ Operator *op = getoperator(t->text, currentmod); - if(op && t->tag == AtomTerm){ + if(op && t->tag == AtomTerm && !t->inparens){ infos[i].type = op->type; infos[i].level = op->level; }else{ -- cgit v1.2.3