Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- reserved ++= List( "bool", "break", "class", "continue", "do", "downto", "else", "extends", "float",
- "for", "if", "integer", "new", "repeat", "string", "then", "to", "until", "while", "return", "true",
- "false", "void", "null", "self", "final", "abstract", "self")
- delimiters ++= List(":", ";", "{", "}", "[", "]", "(", ")",".", ",", "&&",
- "+", "*", "\\",":=", "<", "<=", "<>", "!", "^", "-", "/", "%", "==",
- ">", ">=", "||", "::", "=")
- def processType(name: String) = if (name == "true" || name=="false") BooleanLit(name) else Keyword(name)
- override def processIdent(name: String) =
- if (reserved contains name) processType(name) else Identifier(name)
- override def token: Parser[Token] = {
- // Adapted from StdLexical
- (
- regex("[0-9]+\\.[0-9]*((E|e)(\\+|\\-)[0-9]+)?|[0-9]+(E|e)(\\+|\\-)[0-9]+".r) ^^{FloatLit(_)}
- |regex("[0-9]+".r) ^^ { IntLit(_) }
- |regex("[a-zA-Z_][a-zA-Z0-9_]*".r) ^^ {processIdent(_)}
- |regex("\"([^\\n\\\\\"]|(\\\\n)|(\\\\b)|(\\\\f)|(\\\\r)|(\\\\t)|(\\\\\")|(\\\\\\\\))*\"".r) ^^{StringLit2(_)}
- |regex("\"([^\\n\\\\\"]|(\\\\n)|(\\\\b)|(\\\\f)|(\\\\r)|(\\\\t)|(\\\\\")|(\\\\\\\\))*(\\n|$)".r) ^^{UncloseString(_)}
- |EofCh ^^^ EOF
- |delim
- )
- }
- override def whitespace: Parser[Any] = rep(
- whitespaceChar
- |'#' ~ rep(chrExcept(EofCh,'\n'))
- | '(' ~ '*' ~ comment
- | '(' ~ '*' ~> failure("unclosed comment"))
- override protected def comment: Parser[Any] = (
- '*' ~ ')' ^^ { case _ => ' ' }
- | chrExcept(EofCh) ~ comment)
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement