From 55ca6248ffff6d9e1669fc49fe9de8489adeb7f9 Mon Sep 17 00:00:00 2001 From: Peter Mikkelsen Date: Wed, 12 Jan 2022 20:09:05 +0000 Subject: =?UTF-8?q?Add=20dfn=20evaluation,=20and=20localized=20=E2=8E=95IO?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lexer.c | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) (limited to 'lexer.c') diff --git a/lexer.c b/lexer.c index eb5a3c4..1c35f91 100644 --- a/lexer.c +++ b/lexer.c @@ -9,7 +9,7 @@ Rune primdyadopnames[] = L"⍣.∘⍤⍥@⍠⌺"; Rune primhybridnames[] = L"/\⌿⍀"; Statement * -lexline(Rune *line, Symtab *symtab) +lexline(Rune *line) { int offset = 0; int len = runestrlen(line); @@ -30,7 +30,7 @@ lexline(Rune *line, Symtab *symtab) 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], symtab); goto end; + case L'⋄': stmt->next = lexline(&line[offset+1]); goto end; case L'⍝': goto end; } offset++; @@ -73,6 +73,12 @@ lexline(Rune *line, Symtab *symtab) *p = 0; stmt->toks[stmt->ntoks].tag = ArrayTag; stmt->toks[stmt->ntoks].array = mkscalarint(atoll(buf)); + }else if(runestrchr(L"⍺⍵", line[offset])){ + Rune *name = L"?"; + name[0] = line[offset]; + stmt->toks[stmt->ntoks].tag = NameTag; + stmt->toks[stmt->ntoks].symbol = getsym(currentsymtab, name); + offset++; }else if(isalpharune(line[offset]) || line[offset] == L'⎕'){ int quadname = L'⎕' == line[offset]; Rune buf[64]; @@ -87,7 +93,7 @@ lexline(Rune *line, Symtab *symtab) } *p = 0; stmt->toks[stmt->ntoks].tag = NameTag; - stmt->toks[stmt->ntoks].symbol = getsym(symtab, buf); + stmt->toks[stmt->ntoks].symbol = getsym(currentsymtab, buf); }else{ syntax_error: print("Can't lex: %S\n", &line[offset]); -- cgit v1.2.3