From b63ca926df347798ea113d7b197192bd28399f5a Mon Sep 17 00:00:00 2001 From: Peter Mikkelsen Date: Thu, 20 Jan 2022 22:53:30 +0000 Subject: =?UTF-8?q?Implement=20guards,=20and=20start=20work=20on=20?= =?UTF-8?q?=E2=86=91=20and=20=E2=86=93?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lexer.c | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) (limited to 'lexer.c') diff --git a/lexer.c b/lexer.c index 3fd708d..b2990c8 100644 --- a/lexer.c +++ b/lexer.c @@ -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; -- cgit v1.2.3