/* NSC -- new Scala compiler * Copyright 2005-2009 LAMP/EPFL * @author Martin Odersky */ // $Id: MainTokenMetric.scala 17856 2009-05-27 19:35:02Z dubochet $ package scala.tools.nsc import scala.tools.nsc.reporters.ConsoleReporter /** The main class for NSC, a compiler for the programming * language Scala. */ object MainTokenMetric { private var reporter: ConsoleReporter = _ def tokenMetric(compiler: Global, fnames: List[String]) { import compiler.CompilationUnit import compiler.syntaxAnalyzer.UnitScanner import ast.parser.Tokens.EOF var totale = 0 for (source <- fnames) { val s = new UnitScanner(new CompilationUnit(compiler.getSourceFile(source))) s.nextToken var i = 0 while (s.token != EOF) { i += 1 s.nextToken } Console.println(i.toString + " " + source.toString()) totale += i } Console.println(totale.toString()+" total") } def process(args: Array[String]) { val settings = new Settings(error) reporter = new ConsoleReporter(settings) val command = new CompilerCommand(args.toList, settings, error, false) try { val compiler = new Global(command.settings, reporter) tokenMetric(compiler, command.files) } catch { case ex @ FatalError(msg) => if (command.settings.debug.value) ex.printStackTrace(); reporter.error(null, "fatal error: " + msg) } } def main(args: Array[String]) { process(args) exit(if (reporter.hasErrors) 1 else 0) } }