diff options
Diffstat (limited to 'parser.c')
-rw-r--r-- | parser.c | 13 |
1 files changed, 7 insertions, 6 deletions
@@ -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; } |