1 // A parser and evaluator for teh while language |
1 // A parser and evaluator for teh while language |
2 // |
2 // |
3 //:load matcher.scala |
3 import matcher._ |
4 //:load parser3.scala |
4 import parser._ |
5 |
5 |
6 // some regular expressions |
6 // some regular expressions |
7 val SYM = RANGE("ABCDEFGHIJKLMNOPQRSTUVXYZabcdefghijklmnopqrstuvwxyz_") |
7 val SYM = RANGE("ABCDEFGHIJKLMNOPQRSTUVXYZabcdefghijklmnopqrstuvwxyz_") |
8 val DIGIT = RANGE("0123456789") |
8 val DIGIT = RANGE("0123456789") |
9 val ID = SEQ(SYM, STAR(ALT(SYM, DIGIT))) |
9 val ID = SEQ(SYM, STAR(ALT(SYM, DIGIT))) |
30 case class T_ID(s: String) extends Token |
30 case class T_ID(s: String) extends Token |
31 case class T_OP(s: String) extends Token |
31 case class T_OP(s: String) extends Token |
32 case class T_NUM(s: String) extends Token |
32 case class T_NUM(s: String) extends Token |
33 case class T_KWD(s: String) extends Token |
33 case class T_KWD(s: String) extends Token |
34 |
34 |
35 val lexing_rules: List[Rule[Token]] = |
35 val lexing_rules: List[(Rexp, List[Char] => Token)] = |
36 List((KEYWORD, (s) => T_KWD(s.mkString)), |
36 List((KEYWORD, (s) => T_KWD(s.mkString)), |
37 (ID, (s) => T_ID(s.mkString)), |
37 (ID, (s) => T_ID(s.mkString)), |
38 (OP, (s) => T_OP(s.mkString)), |
38 (OP, (s) => T_OP(s.mkString)), |
39 (NUM, (s) => T_NUM(s.mkString)), |
39 (NUM, (s) => T_NUM(s.mkString)), |
40 (SEMI, (s) => T_SEMI), |
40 (SEMI, (s) => T_SEMI), |
313 |
313 |
314 List(1, 5000, 10000, 50000, 100000, 250000, 500000, 750000, 1000000).map(compile_test(_)) |
314 List(1, 5000, 10000, 50000, 100000, 250000, 500000, 750000, 1000000).map(compile_test(_)) |
315 |
315 |
316 |
316 |
317 |
317 |
318 // javabyte code assmbler |
318 // Javabyte code assmbler |
319 // |
319 // |
320 // java -jar jvm/jasmin-2.4/jasmin.jar loops.j |
320 // java -jar jvm/jasmin-2.4/jasmin.jar loops.j |
321 |
321 |
322 |
322 |
323 |
323 |
324 |
324 |
325 |
325 |
326 |
326 |
327 |
|