From bd5426c7096f7169736dc0a886c33b8985cd8655 Mon Sep 17 00:00:00 2001 From: yenru0 Date: Fri, 3 Oct 2025 14:06:47 +0900 Subject: [PATCH] add cminus.l --- src/{lex => }/cminus.l | 36 +++++++++++++++++++++++------------- 1 file changed, 23 insertions(+), 13 deletions(-) rename src/{lex => }/cminus.l (66%) diff --git a/src/lex/cminus.l b/src/cminus.l similarity index 66% rename from src/lex/cminus.l rename to src/cminus.l index aa96caa..7785a61 100644 --- a/src/lex/cminus.l +++ b/src/cminus.l @@ -23,33 +23,43 @@ whitespace [ \t]+ %% "if" {return IF;} -"then" {return THEN;} "else" {return ELSE;} -"end" {return END;} -"repeat" {return REPEAT;} -"until" {return UNTIL;} -"read" {return READ;} -"write" {return WRITE;} -":=" {return ASSIGN;} -"=" {return EQ;} +"while" {return WHILE;} +"return" {return RETURN;} +"int" {return INT;} +"void" {return VOID;} + +"=" {return ASSIGN;} +"==" {return EQ;} +"!=" {return NE;} "<" {return LT;} +"<=" {return LE;} +">" {return GT;} +">=" {return GE;} "+" {return PLUS;} "-" {return MINUS;} "*" {return TIMES;} "/" {return OVER;} "(" {return LPAREN;} ")" {return RPAREN;} +"[" {return LBRACE;} +"]" {return RBRACE;} +"{" {return LCURLY;} +"}" {return RCURLY;} ";" {return SEMI;} +"," {return COMMA;} {number} {return NUM;} {identifier} {return ID;} {newline} {lineno++;} {whitespace} {/* skip whitespace */} -"{" { char c; +"/*" { char now, prev; do - { c = input(); - if (c == EOF) break; - if (c == '\n') lineno++; - } while (c != '}'); + { now = input(); + if (now == EOF) break; + else if (now == '\n') lineno++; + else if (now == '/' && prev == '*') break; + prev = now; + } while (1); } . {return ERROR;}