11package com .annimon .ownlang ;
22
33import com .annimon .ownlang .lib .CallStack ;
4- import com .annimon .ownlang .lib .Function ;
5- import com .annimon .ownlang .lib .Functions ;
64import com .annimon .ownlang .parser .Lexer ;
75import com .annimon .ownlang .parser .Parser ;
86import com .annimon .ownlang .parser .Token ;
1412import java .nio .file .Files ;
1513import java .nio .file .Paths ;
1614import java .util .List ;
15+ import java .util .concurrent .TimeUnit ;
1716
1817/**
1918 * @author aNNiMON
@@ -22,11 +21,11 @@ public final class Main {
2221
2322 public static void main (String [] args ) throws IOException {
2423 if (args .length == 0 ) {
25- run (readFile ("program.own" ), true , true );
24+ run (readFile ("program.own" ), true , true , true );
2625 return ;
2726 }
2827
29- boolean showTokens = false , showAst = false ;
28+ boolean showTokens = false , showAst = false , showMeasurements = false ;
3029 String input = null ;
3130 for (int i = 0 ; i < args .length ; i ++) {
3231 switch (args [i ]) {
@@ -40,6 +39,11 @@ public static void main(String[] args) throws IOException {
4039 showTokens = true ;
4140 break ;
4241
42+ case "-m" :
43+ case "--showtime" :
44+ showMeasurements = true ;
45+ break ;
46+
4347 case "-f" :
4448 case "--file" :
4549 if (i + 1 < args .length ) {
@@ -55,23 +59,28 @@ public static void main(String[] args) throws IOException {
5559 if (input == null ) {
5660 throw new IllegalArgumentException ("Empty input" );
5761 }
58- run (input , showTokens , showAst );
62+ run (input , showTokens , showAst , showMeasurements );
5963 }
6064
6165 private static String readFile (String file ) throws IOException {
6266 return new String ( Files .readAllBytes (Paths .get (file )), "UTF-8" );
6367 }
6468
65- private static void run (String input , boolean showTokens , boolean showAst ) {
69+ private static void run (String input , boolean showTokens , boolean showAst , boolean showMeasurements ) {
70+ final TimeMeasurement measurement = new TimeMeasurement ();
71+ measurement .start ("Tokenize time" );
6672 final List <Token > tokens = new Lexer (input ).tokenize ();
73+ measurement .stop ("Tokenize time" );
6774 if (showTokens ) {
6875 for (int i = 0 ; i < tokens .size (); i ++) {
6976 System .out .println (i + " " + tokens .get (i ));
7077 }
7178 }
7279
80+ measurement .start ("Parse time" );
7381 final Parser parser = new Parser (tokens );
7482 final Statement program = parser .parse ();
83+ measurement .stop ("Parse time" );
7584 if (showAst ) {
7685 System .out .println (program .toString ());
7786 }
@@ -83,9 +92,15 @@ private static void run(String input, boolean showTokens, boolean showAst) {
8392// program.accept(new VariablePrinter());
8493 program .accept (new AssignValidator ());
8594 try {
95+ measurement .start ("Execution time" );
8696 program .execute ();
8797 } catch (Exception ex ) {
8898 handleException (Thread .currentThread (), ex );
99+ } finally {
100+ if (showMeasurements ) {
101+ measurement .stop ("Execution time" );
102+ System .out .println (measurement .summary (TimeUnit .MILLISECONDS , true ));
103+ }
89104 }
90105 }
91106
0 commit comments