From 230aac3c644df9d80c8eba507e6bc7c710b26b52 Mon Sep 17 00:00:00 2001 From: Peter Mikkelsen Date: Thu, 20 Jan 2022 23:07:08 +0000 Subject: Implement better dnfs semantics --- lexer.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) (limited to 'lexer.c') diff --git a/lexer.c b/lexer.c index b2990c8..f734912 100644 --- a/lexer.c +++ b/lexer.c @@ -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])){ -- cgit v1.2.3