summaryrefslogtreecommitdiff
path: root/lexer.c
diff options
context:
space:
mode:
Diffstat (limited to 'lexer.c')
-rw-r--r--lexer.c17
1 files changed, 14 insertions, 3 deletions
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;