Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- object SymbolTable {
- val empty = new SymbolTable(Map.empty[String, Symbol] :: Nil)
- }
- final class SymbolTable private(scopes: List[Map[String, Symbol]]) {
- def inCurrentScope(name: String): Boolean = scopes.head.contains(name)
- def resolve(name: String): Option[Symbol] = scopes.view.map(_.get(name)).find(!_.isEmpty).flatten
- def inScope(name: String): Boolean = !resolve(name).isEmpty
- def isTypeAlias(name: String): Boolean = resolve(name).exists(_.isInstanceOf[TypeAlias])
- def add(name: String, symbol: Symbol): SymbolTable = new SymbolTable(scopes.head + (name -> symbol) :: scopes.tail)
- def openScope: SymbolTable = new SymbolTable(Map.empty[String, Symbol] :: scopes)
- def closeScope: SymbolTable = new SymbolTable(scopes.tail)
- override def toString = scopes.toString
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement