--- 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