X-Git-Url: https://secure.softndesign.org/git/?a=blobdiff_plain;f=parser.c;h=a98eab0dd27248e0117301c73e50629b37fcfb91;hb=ec3c436489066253b415d5d308808c2c1beed144;hp=7880acfa156c049e13c778cc5c280faec0f3c412;hpb=868158ee9a292bf75ebf70fade1007084b9ee1cd;p=calc.git diff --git a/parser.c b/parser.c index 7880acf..a98eab0 100644 --- a/parser.c +++ b/parser.c @@ -144,6 +144,10 @@ element_t *parser (char *str, char **next, int prio) if (*str == '(') { VERBOSE (DEBUG, fprintf (stdout, "start processing bracket\n")); if (root) { + if (root->func == Val) { + delelement (root); + return ERROR_OP; + } do { found = 0; new = parser (str + 1, &str, 0); @@ -169,7 +173,7 @@ element_t *parser (char *str, char **next, int prio) } } while (*str == ','); } else { - root = newelement (Val, 1, 5); + root = newelement (Id, 1, 5); new = parser (str + 1, &str, 0); if ((new == NULL) || ((new != ERROR_OP) && (new->prio == 9))) { delelement (new); @@ -369,6 +373,7 @@ void print_element (element_t *root, int level) switch (root->func) { case Val: func = "Value"; break; + case Id: func = "Ident"; break; case Sig: func = "Sign"; break; case Add: func = "Addition"; break; case Sub: func = "Subtraction"; break; @@ -639,6 +644,7 @@ double evaluate_element (element_t *root, char mask) return 0; } /* fallthrough */ + case Id: case Sqr: case Cos: case Sin: @@ -745,6 +751,7 @@ double evaluate_element (element_t *root, char mask) switch (root->func) { case Val: return op0; + case Id: return op0; case Sig: return -op0; case Add: return ((mask & MASK_SUB) == 0) ? op0 + op1 : op0 - op1; case Sub: return ((mask & MASK_SUB) == 0) ? op0 - op1 : op0 + op1;