progs/compile-lexer.scala
changeset 323 4ce07c4abdb4
parent 227 93bd75031ced
child 704 6d9c960a2b26
equal deleted inserted replaced
322:698ed1c96cd0 323:4ce07c4abdb4
   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