Advertisement
tudzic

Untitled

Oct 31st, 2014
173
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Scala 1.57 KB | None | 0 0
  1.   reserved ++= List("bool", "break", "class", "continue", "do", "downto", "else", "extends", "float",
  2.     "for", "if", "integer", "new", "repeat", "string", "then", "to", "until", "while", "return", "true",
  3.     "false", "void", "null", "self", "final", "abstract");
  4.  
  5.   delimiters ++= List(":", ";", "{", "}", "[", "]", "(", ")", ".", ",", "&&",
  6.     "+", "*", "\\", ":=", "<", "<=", "<>", "!", "^", "-", "/", "%", "==",
  7.     ">", ">=", "||", "::", "=");
  8.   def processType(name: String) = if (name == "true" || name == "false") BooleanLit(name) else Keyword(name)
  9.  
  10.   override def processIdent(name: String) =
  11.     if (reserved contains name) processType(name) else Identifier(name)
  12.   override def token: Parser[Token] = {
  13.     // Adapted from StdLexical
  14.     (
  15.       //updated
  16.       regex("([0-9]+\\.[0-9]*((E|e)(\\+|-)?[0-9]+)?)|([0-9]+(E|e)(\\+|\\-)?[0-9]+)".r) ^^ { FloatLit(_) }
  17.       | regex("[0-9]+".r) ^^ { IntLit(_) }
  18.       | regex("[a-zA-Z_][a-zA-Z0-9_]*".r) ^^ { processIdent(_) }
  19.       | regex("\"([^\\n\\\\\"]|(\\\\n)|(\\\\b)|(\\\\f)|(\\\\r)|(\\\\t)|(\\\\\")|(\\\\\\\\))*\"".r) ^^ { StringLit2(_) }
  20.       | regex("\"([^\\n\\\\\"]|(\\\\n)|(\\\\b)|(\\\\f)|(\\\\r)|(\\\\t)|(\\\\\")|(\\\\\\\\))*".r) ^^ { UncloseString(_) }
  21.       | EofCh ^^^ EOF
  22.       | delim)
  23.  
  24.   }
  25.   override def whitespace: Parser[Any] = rep(
  26.     whitespaceChar
  27.       | '#' ~ rep(chrExcept(EofCh, '\n'))
  28.       | '(' ~ '*' ~ comment
  29.       | '(' ~ '*' ~> failure("unclosed comment"))
  30.  
  31.   override protected def comment: Parser[Any] = (
  32.     '*' ~ ')' ^^ { case _ => ' ' }
  33.     | chrExcept(EofCh) ~ comment)
  34.  
  35. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement