summaryrefslogtreecommitdiff
path: root/parser.c
diff options
context:
space:
mode:
Diffstat (limited to 'parser.c')
-rw-r--r--parser.c13
1 files changed, 7 insertions, 6 deletions
diff --git a/parser.c b/parser.c
index 1e4dc41..e1a7de8 100644
--- a/parser.c
+++ b/parser.c
@@ -292,9 +292,9 @@ parseoperators(Term *list)
syntaxerror("parseoperators");
}
- int infixlevel = infos[index].level & (Xfx|Xfy|Yfx);
- int prefixlevel = infos[index].level & (Fx|Fy);
- int postfixlevel = infos[index].level & (Xf|Yf);
+ int infixlevel = infos[index].type & (Xfx|Xfy|Yfx);
+ int prefixlevel = infos[index].type & (Fx|Fy);
+ int postfixlevel = infos[index].type & (Xf|Yf);
if(infixlevel && index != 0 && index != length-1 && infos[index-1].type == 0 && infos[index-1].type == 0){
infos[index-1].type = 0;
@@ -328,7 +328,7 @@ parseoperators(Term *list)
terms[i] = terms[i+1];
}
}else{
- print("Parse error when parsing operators\n");
+ 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);
syntaxerror("parseoperators");
}
}
@@ -413,6 +413,7 @@ getoperator(Rune *spelling)
}
}
}
+
return op;
}
@@ -442,7 +443,6 @@ nexttoken(void)
if(peek == L'%'){
while(peek != L'\n')
peek = Bgetrune(parsein);
- Bgetrune(parsein);
peek = Bgetrune(parsein);
}
@@ -595,7 +595,7 @@ Integer:
}
/* Other */
- if(runestrchr(L",.()]}|!", peek)){
+ if(runestrchr(L",.()]}|!;", peek)){
switch(peek){
case L',': lookahead.tag = CommaTok; break;
case L'(': lookahead.tag = ParenLeftTok; break;
@@ -604,6 +604,7 @@ Integer:
case L'}': lookahead.tag = CurlyBracketRightTok; break;
case L'|': lookahead.tag = PipeTok; break;
case L'!': lookahead.tag = AtomTok; lookahead.text = runestrdup(L"!"); break;
+ case L';': lookahead.tag = AtomTok; lookahead.text = runestrdup(L";"); break;
}
return;
}