progs/scala/re-ext.scala
changeset 231 02fd56e2019e
parent 229 81c85f2746f5
child 234 18d19d039ac9
equal deleted inserted replaced
230:80e7a94f6670 231:02fd56e2019e
   247 // Two Simple Tests for the While Language
   247 // Two Simple Tests for the While Language
   248 //========================================
   248 //========================================
   249 
   249 
   250 // Lexing Rules 
   250 // Lexing Rules 
   251 
   251 
   252 def PLUSs(r: Rexp) = r ~ r.%
   252 val SYM = CHARS ("abcdefghijklmnopqrstuvwxyz" contains _)
   253 val SYM = "a" | "b" | "c" | "d" | "e" | "f" | "g" | "h" | "i" | "j" | "k" | "l" | "m" | "n" | "o" | "p" | "q" | "r" | "s" | "t" | "u" | "v" | "w" | "x" | "y" | "z"
   253 val DIGIT = CHARS("0123456789" contains _)
   254 val DIGIT = "0" | "1" | "2" | "3" | "4" | "5" | "6" | "7" | "8" | "9"
       
   255 val ID = SYM ~ (SYM | DIGIT).% 
   254 val ID = SYM ~ (SYM | DIGIT).% 
   256 val NUM = PLUSs(DIGIT)
   255 val NUM = PLUS(DIGIT)
   257 val KEYWORD : Rexp = "skip" | "while" | "do" | "if" | "then" | "else" | "read" | "write" | "true" | "false"
   256 val KEYWORD : Rexp = "skip" | "while" | "do" | "if" | "then" | "else" | "read" | "write" | "true" | "false"
   258 val SEMI: Rexp = ";"
   257 val SEMI: Rexp = ";"
   259 val OP: Rexp = ":=" | "==" | "-" | "+" | "*" | "!=" | "<" | ">" | "<=" | ">=" | "%" | "/"
   258 val OP: Rexp = ":=" | "==" | "-" | "+" | "*" | "!=" | "<" | ">" | "<=" | ">=" | "%" | "/"
   260 val WHITESPACE = PLUSs(" " | "\n" | "\t")
   259 val WHITESPACE = PLUS(" " | "\n" | "\t")
   261 val RPAREN: Rexp = ")"
   260 val RPAREN: Rexp = ")"
   262 val LPAREN: Rexp = "("
   261 val LPAREN: Rexp = "("
   263 val BEGIN: Rexp = "{"
   262 val BEGIN: Rexp = "{"
   264 val END: Rexp = "}"
   263 val END: Rexp = "}"
   265 val STRING: Rexp = "\"" ~ SYM.% ~ "\""
   264 val STRING: Rexp = "\"" ~ SYM.% ~ "\""
   334 """
   333 """
   335 
   334 
   336 println("prog3 test - tokens")
   335 println("prog3 test - tokens")
   337 println(env(lexing_simp(WHILE_REGS, prog3)))
   336 println(env(lexing_simp(WHILE_REGS, prog3)))
   338 
   337 
   339 /*
   338 println("prog2 replicated test")
   340 for (i <- 1 to 80) {
   339 
   341   print(i.toString + ":  ")
   340 for (i <- 1 to 88) {
   342   time(lexing_simp(WHILE_REGS, prog2 * i))
   341   println(i + ": " + "%.5f".format(time_needed(2, lexing_simp(WHILE_REGS, prog2 * i))))
   343 }
   342 }
   344 */
   343 
   345 
   344 
   346 // Sulzmann's tests
   345 // Sulzmann's tests
   347 //==================
   346 //==================
   348 
   347 
   349 val sulzmann = ("a" | "b" | "ab").%
   348 val sulzmann = ("a" | "b" | "ab").%