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");
- 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
- (
- //updated
- 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)|(\\\\\")|(\\\\\\\\))*".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