equal
deleted
inserted
replaced
110 case c::s => ders(s, der(c, r)) |
110 case c::s => ders(s, der(c, r)) |
111 } |
111 } |
112 |
112 |
113 |
113 |
114 // regular expressions for the While language |
114 // regular expressions for the While language |
115 val SYM = RANGE("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz_") |
115 val SYM = RANGE("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz_".toList) |
116 val DIGIT = RANGE("0123456789") |
116 val DIGIT = RANGE("0123456789".toList) |
117 val ID = SYM ~ (SYM | DIGIT).% |
117 val ID = SYM ~ (SYM | DIGIT).% |
118 val NUM = PLUS(DIGIT) |
118 val NUM = PLUS(DIGIT) |
119 val KEYWORD : Rexp = "skip" | "while" | "do" | "if" | "then" | "else" | "read" | "write" | "true" | "false" |
119 val KEYWORD : Rexp = "skip" | "while" | "do" | "if" | "then" | "else" | "read" | "write" | "true" | "false" |
120 val SEMI: Rexp = ";" |
120 val SEMI: Rexp = ";" |
121 val OP: Rexp = ":=" | "==" | "-" | "+" | "*" | "!=" | "<" | ">" | "%" | "/" |
121 val OP: Rexp = ":=" | "==" | "-" | "+" | "*" | "!=" | "<" | ">" | "%" | "/" |
129 val COMMENT2 = ("/*" ~ NOT(ALL.% ~ "*/" ~ ALL.%) ~ "*/") |
129 val COMMENT2 = ("/*" ~ NOT(ALL.% ~ "*/" ~ ALL.%) ~ "*/") |
130 val COMMENT = ("/*" ~ ALL2.% ~ "*/") | ("//" ~ ALL.% ~ "\n") |
130 val COMMENT = ("/*" ~ ALL2.% ~ "*/") | ("//" ~ ALL.% ~ "\n") |
131 val STRING = "\"" ~ ALL.% ~ "\"" |
131 val STRING = "\"" ~ ALL.% ~ "\"" |
132 |
132 |
133 |
133 |
134 // token for While languag |
134 // token for While language |
135 abstract class Token |
135 abstract class Token |
136 case object T_WHITESPACE extends Token |
136 case object T_WHITESPACE extends Token |
137 case object T_SEMI extends Token |
137 case object T_SEMI extends Token |
138 case object T_LPAREN extends Token |
138 case object T_LPAREN extends Token |
139 case object T_RPAREN extends Token |
139 case object T_RPAREN extends Token |