Changeset 2652


Ignore:
Timestamp:
Nov 18, 2012, 7:13:13 PM (6 years ago)
Author:
ksherdy
Message:

Added command line options library and parsing.

Location:
proto/pablo/src/compiler
Files:
1 added
3 edited

Legend:

Unmodified
Added
Removed
  • proto/pablo/src/compiler/PabloApplication.java

    r2579 r2652  
    1111                super();
    1212        }
    13        
     13
    1414}
  • proto/pablo/src/compiler/PabloCompiler.java

    r2651 r2652  
    66import java.util.Map;
    77
     8import  tokens.Tokens;
     9import  ast.ASTNode;
    810import  lexicalAnalyzer.LexicalController;
    911import parser.Parser;
    10 // import semanticAnalyzer.SampleSemanticAnalyzer;
    11 // import codeGeneration.CodeGenerator;
    12 
    13 import  tokens.Tokens;
    14 import  ast.ASTNode;
    1512import  logging.ScatterLogger;
    16 
    1713import compiler.lang.idisa.*;
    1814import compiler.visitors.*;
     15//import semanticAnalyzer.SampleSemanticAnalyzer;
     16//import codeGeneration.CodeGenerator;
    1917
     18import org.apache.commons.cli.CommandLine;
     19import org.apache.commons.cli.CommandLineParser;
     20import org.apache.commons.cli.HelpFormatter;
     21import org.apache.commons.cli.Options;
     22import org.apache.commons.cli.PosixParser;
     23 
    2024@SuppressWarnings("unused")
    2125public class PabloCompiler extends PabloApplication {
    2226       
    23         protected static final int EXIT_CODE_FOR_ERROR = 1;
     27        public static final String applicationName = "PabloCompiler";   
     28        public static final int EXIT_CODE_FOR_ERROR = 1;
    2429        protected static String outputDirectory = "output/";
    2530        protected static String inputFilename = null;           
    2631       
    2732        public static void main(String[] args) throws FileNotFoundException {
    28                 checkArguments(args, "PabloCompiler");
     33       
     34                Options options = Config.createOptions();
     35               
     36                try {
     37                        CommandLineParser parser = new PosixParser();
     38                        CommandLine cmd = parser.parse(options, args);
     39                        inputFilename = cmd.getOptionValue("i");
     40                       
     41                        if(cmd.hasOption("o")) {
     42                            outputDirectory = cmd.getOptionValue("o");
     43                        }
     44                       
     45                } catch (Exception e) {
     46                        //e.printStackTrace();
     47                        Config.exitWithUsageMessage(options);
     48                }
    2949               
    3050                Tokens.setPrintLevel(Tokens.Level.FULL);
     
    3252        }
    3353       
    34         /** analyzes a file specified by filename.
    35          * @param filename the name of the file to be analyzed.
     54        /**
     55         * @param filename
    3656         * @throws FileNotFoundException
    3757         */
     
    97117                informUserNoCodeGenerated();
    98118        }
     119       
    99120        private static void informUserNoCodeGenerated() {
    100                 System.err.println("program has errors.  no parser produced.");
     121                System.err.println("Pablo program errors. No code generated.");
    101122        }
    102123       
    103         // normal code generation.
    104124        private static void generateAndPrintCode(ASTNode decoratedTree)
    105125                        throws FileNotFoundException {
     
    107127//              generator.generate();
    108128        }
    109 
     129       
    110130        private static boolean thereAreErrors() {
    111131                return ScatterLogger.hasErrors();
    112132        }
    113        
    114         protected static void checkArguments(String[] args, String applicationName) {
    115                 int length = args.length;
    116                 boolean inputFilenameFound = false;
    117133               
    118                 for(int i=0; i<length; i++) {
    119                         String arg = args[i];
    120                        
    121                         if(arg.equals("-o")) {
    122                                 if(i==length-1) {
    123                                         exitWithUsageMessage(applicationName);
    124                                 }
    125                                 arg = args[++i];
    126                                 outputDirectory = arg + "/";
    127                         }
    128                         else if(!inputFilenameFound) {
    129                                 inputFilename = arg;
    130                                 inputFilenameFound = true;
    131                         }
    132                         else {
    133                                 exitWithUsageMessage(applicationName);
    134                         }
    135                 }
    136                
    137                 if(!inputFilenameFound) {
    138                         exitWithUsageMessage(applicationName);
    139                 }
    140         }
    141        
    142         private static void exitWithUsageMessage(String applicationName) {
    143                 System.err.println("Usage: " + applicationName + " filename [-o outputDirectory]");
    144                 System.exit(EXIT_CODE_FOR_ERROR);
    145         }       
    146134}
    147135
  • proto/pablo/src/compiler/ReadMe.txt

    r2641 r2652  
    32321. Support negative numbers.
    33332. Fix indentation. Nested if's etc.   
    34 3. simd::constant<1>(0) <-- if CarryQ ignore
     34//3. simd::constant<1>(0) <-- if CarryQ ignore
    35354. Add assert compiler.
    3636//5. Add SIMD register dump.
    37 6. if stream_function.carry_count > 0:
    38          node.body += [mkCallStmt('carryQ.CarryQ_Adjust', [ast.Num(stream_function.carry_count)])]
     37//6. if stream_function.carry_count > 0:
     38//       node.body += [mkCallStmt('carryQ.CarryQ_Adjust', [ast.Num(stream_function.carry_count)])]
    3939
    4040Current Compiler Design Issues
     
    5353
    5454   (d) Name Visitors SomeNameVisitor, InnerSomeNameVisitor; and Name SomeNameTransformer, InnerSomeNameTransformer.
     55
     56   Work in progress.
    5557   
    56583. Visitor dependency. Tree transformation, e.g. carry counter depends on
    5759   'Advance(x)' function name and argument count.
     60   
     61   Done.
    5862   
    59634. Boolean OR, Boolean AND. Pablo may require a boolean type as well as binary and boolean
     
    7074   introduction of a Boolean type to the Pablo language.
    7175
    72    --> if((bitblock::any(C | CarryQ.CarryTest(base,count))
     76   --> if((bitblock::any(C | CarryQ.CarryTest(base,count))
     77   
     78   Done.
    7379
    74805. Verify function call expressions versus function call statements. Go over code
Note: See TracChangeset for help on using the changeset viewer.