/* NSC -- new Scala compiler * Copyright 2005-2009 LAMP/EPFL * @author Martin Odersky */ // $Id: Tokens.scala 18387 2009-07-24 15:28:37Z odersky $ package scala.tools.nsc package ast.parser object Tokens { /** special tokens */ final val EMPTY = -3 final val UNDEF = -2 final val ERROR = -1 final val EOF = 0 /** literals */ final val CHARLIT = 1 final val INTLIT = 2 final val LONGLIT = 3 final val FLOATLIT = 4 final val DOUBLELIT = 5 final val STRINGLIT = 6 final val SYMBOLLIT = 7 def isLiteral(code : Int) = code >= CHARLIT && code <= SYMBOLLIT /** identifiers */ final val IDENTIFIER = 10 final val BACKQUOTED_IDENT = 11 def isIdentifier(code : Int) = code >= IDENTIFIER && code <= BACKQUOTED_IDENT def canBeginExpression(code : Int) = code match { case IDENTIFIER|BACKQUOTED_IDENT|USCORE => true case LBRACE|LPAREN|LBRACKET|COMMENT|STRINGLIT => true case IF|DO|WHILE|FOR|NEW|TRY|THROW => true case NULL|THIS|TRUE|FALSE => true case code if isLiteral(code) => true case _ => false } /** keywords */ final val IF = 20 final val FOR = 21 final val ELSE = 22 final val THIS = 23 final val NULL = 24 final val NEW = 25 final val WITH = 26 final val SUPER = 27 final val CASE = 28 final val CASECLASS = 29 final val CASEOBJECT = 30 final val VAL = 31 final val ABSTRACT = 32 final val FINAL = 33 final val PRIVATE = 34 final val PROTECTED = 35 final val OVERRIDE = 36 final val IMPLICIT = 37 final val VAR = 38 final val DEF = 39 final val TYPE = 40 final val EXTENDS = 41 final val TRUE = 42 final val FALSE = 43 final val OBJECT = 44 final val CLASS = 45 final val IMPORT = 46 final val PACKAGE = 47 final val YIELD = 48 final val DO = 49 final val TRAIT = 50 final val SEALED = 51 final val THROW = 52 final val TRY = 53 final val CATCH = 54 final val FINALLY = 55 final val WHILE = 56 final val RETURN = 57 final val MATCH = 58 final val FORSOME = 59 final val REQUIRES = 60 final val LAZY = 61 def isKeyword(code : Int) = code >= IF && code <= LAZY def isDefinition(code : Int) = code match { case CLASS|TRAIT|OBJECT => true case CASECLASS|CASEOBJECT => true case DEF|VAL|VAR => true case TYPE => true case _ => false } /** special symbols */ final val COMMA = 70 final val SEMI = 71 final val DOT = 72 final val USCORE = 73 final val COLON = 74 final val EQUALS = 75 final val LARROW = 76 final val ARROW = 77 final val NEWLINE = 78 final val NEWLINES = 79 final val SUBTYPE = 80 final val SUPERTYPE = 81 final val HASH = 82 final val AT = 83 final val VIEWBOUND = 84 def isSymbol(code : Int) = code >= COMMA && code <= VIEWBOUND /** parenthesis */ final val LPAREN = 90 final val RPAREN = 91 final val LBRACKET = 92 final val RBRACKET = 93 final val LBRACE = 94 final val RBRACE = 95 def isBrace(code : Int) = code >= LPAREN && code <= RBRACE def isOpenBrace(code : Int) = isBrace(code) && (code % 2 == 0) def isCloseBrace(code : Int) = isBrace(code) && (code % 2 == 1) /** XML mode */ final val XMLSTART = 96 /** for IDE only */ final val COMMENT = 97 final val WHITESPACE = 105 final val IGNORE = 106 final val ESCAPE = 109 def isSpace(at : Char) = at match { case ' ' | '\t' => true case _ => false } import scala.tools.nsc.util.SourceFile._ def isNewLine(at : Char) = at match { case CR | LF | FF => true case _ => false } }