diff options
Diffstat (limited to 'lexer.c')
-rw-r--r-- | lexer.c | 17 |
1 files changed, 14 insertions, 3 deletions
@@ -14,6 +14,7 @@ lexline(Rune *line) Statement *stmt = emalloc(sizeof(Statement)); stmt->ntoks = 0; stmt->toks = mallocz(sizeof(Datum) * MAX_LINE_TOKENS, 1); + stmt->guard = nil; stmt->next = nil; while(offset < len){ @@ -21,10 +22,8 @@ lexline(Rune *line) if(isspacerune(line[offset])){ offset++; continue; - }else if(runestrchr(L"[]←⋄⍝⍬", line[offset])){ + }else if(runestrchr(L"←⋄⍝⍬", line[offset])){ switch(line[offset]){ - case '[': stmt->toks[stmt->ntoks].tag = LBracketTag; break; - case ']': stmt->toks[stmt->ntoks].tag = RBracketTag; break; case L'←': stmt->toks[stmt->ntoks].tag = ArrowTag; break; case L'⋄': stmt->next = lexline(&line[offset+1]); goto end; case L'⍝': goto end; @@ -35,6 +34,18 @@ lexline(Rune *line) break; } offset++; + }else if(line[offset] == ':'){ + Rune buf[MAX_LINE_LENGTH]; + Rune *p = buf; + offset++; + while(line[offset] != L'⋄' && offset < len){ + *p = line[offset]; + p++; + offset++; + } + *p = 0; + stmt->guard = lexline(buf); + stmt->ntoks--; }else if(line[offset] == '{'){ Rune buf[MAX_LINE_LENGTH]; Rune *p = buf; |