diff -r ae9ffbf979ff -r 31e011ce66e3 progs/lexer/lex.sc --- a/progs/lexer/lex.sc Fri Oct 17 11:20:49 2025 +0100 +++ b/progs/lexer/lex.sc Sun Oct 19 09:44:04 2025 +0200 @@ -51,9 +51,6 @@ def ~ (s: Rexp) = SEQ(r, s) } -// to use & for records, instead of $ which had -// its precedence be changed in Scala 3 - val TEST = ("ab" | "ba").% def nullable(r: Rexp) : Boolean = r match { @@ -148,18 +145,6 @@ println(lex(STAR(STAR("a")), "aaa".toList)) -val re = ("a" | "ab") ~ ("c" | "bc") - -println(pders1("abc", re).toList.mkString("\n")) -pders('a', pder('a', re)))) -draw(simp(der('a', der('a', der('a', re))))) - -size(simp(ders(, re))) -size(simp(der('a', der('a', re)))) -size(simp(der('a', der('a', der('a', re))))) - - -lex(re, "aaaaa".toList) // The Lexing Rules for the WHILE Language @@ -190,21 +175,22 @@ } import TAGS._ + extension (t: TAGS) { - def & (r: Rexp) = RECD[TAGS](t, r) + def $ (r: Rexp) = RECD[TAGS](t, r) } def lexing(r: Rexp, s: String) = env[TAGS](lex(r, s.toList)) -val WHILE_REGS = ((Key & KEYWORD) | - (Id & ID) | - (Op & OP) | - (Num & NUM) | - (Semi & SEMI) | - (Str & STRING) | - (Paren & (LPAREN | RPAREN)) | - (Wht & WHITESPACE)).% +val WHILE_REGS = ((Key $ KEYWORD) | + (Id $ ID) | + (Op $ OP) | + (Num $ NUM) | + (Semi $ SEMI) | + (Str $ STRING) | + (Paren $ (LPAREN | RPAREN)) | + (Wht $ WHITESPACE)).% // Two Simple While Tests