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").% |