diff options
author | Peter Mikkelsen <petermikkelsen10@gmail.com> | 2022-01-20 23:07:08 +0000 |
---|---|---|
committer | Peter Mikkelsen <petermikkelsen10@gmail.com> | 2022-01-20 23:07:08 +0000 |
commit | 230aac3c644df9d80c8eba507e6bc7c710b26b52 (patch) | |
tree | a440f14305fe71e148e6835f319869e5f04c16c4 /lexer.c | |
parent | 56ddfd33a5564afefdf264c91f2eca2ac3c37e08 (diff) |
Implement better dnfs semantics
Diffstat (limited to 'lexer.c')
-rw-r--r-- | lexer.c | 10 |
1 files changed, 5 insertions, 5 deletions
@@ -7,7 +7,7 @@ Rune primhybridnames[] = L"/\⌿⍀"; Statement * -lexline(Rune *line) +lexline(Rune *line, int toplevel) { int offset = 0; int len = runestrlen(line); @@ -25,7 +25,7 @@ lexline(Rune *line) }else if(runestrchr(L"←⋄⍝⍬", line[offset])){ switch(line[offset]){ case L'←': stmt->toks[stmt->ntoks].tag = ArrowTag; break; - case L'⋄': stmt->next = lexline(&line[offset+1]); goto end; + case L'⋄': stmt->next = lexline(&line[offset+1], toplevel); goto end; case L'⍝': goto end; case L'⍬': stmt->toks[stmt->ntoks].tag = ArrayTag; @@ -34,7 +34,7 @@ lexline(Rune *line) break; } offset++; - }else if(line[offset] == ':'){ + }else if(!toplevel && line[offset] == ':'){ Rune buf[MAX_LINE_LENGTH]; Rune *p = buf; offset++; @@ -44,7 +44,7 @@ lexline(Rune *line) offset++; } *p = 0; - stmt->guard = lexline(buf); + stmt->guard = lexline(buf, toplevel); stmt->ntoks--; }else if(line[offset] == '{'){ Rune buf[MAX_LINE_LENGTH]; @@ -81,7 +81,7 @@ lexline(Rune *line) *p = 0; offset++; stmt->toks[stmt->ntoks].tag = LParTag; - stmt->toks[stmt->ntoks].stmt = *lexline(buf); + stmt->toks[stmt->ntoks].stmt = *lexline(buf, toplevel); stmt->ntoks++; stmt->toks[stmt->ntoks].tag = RParTag; }else if(p = runestrchr(primfuncnames, line[offset])){ |