X-Git-Url: http://plrg.eecs.uci.edu/git/?p=cdsspec-compiler.git;a=blobdiff_plain;f=grammer%2Fspec-compiler.jj;h=a006e7bca3e5a463650b80f917e11477270df1d0;hp=110dcb9c4979d84b5c8f4322ffef46e91a171a6f;hb=944b6af217212532a88e314df52a4cf5a99ed36a;hpb=f8b1679d97465996868b3251c1da6aa412fd098b diff --git a/grammer/spec-compiler.jj b/grammer/spec-compiler.jj index 110dcb9..a006e7b 100644 --- a/grammer/spec-compiler.jj +++ b/grammer/spec-compiler.jj @@ -22,8 +22,11 @@ @Begin @Interface: ... @Commit_point_set: - ... + IDENTIFIER | IDENTIFIER ... @Condition: ... (Optional) + @HB_Condition: + IDENTIFIER :: + @HB_Condition: ... @ID: ... (Optional, use default ID) @Check: (Optional) ... @@ -67,7 +70,15 @@ package edu.uci.eecs.specCompiler.grammerParser; import java.io.FileInputStream; import java.io.FileNotFoundException; - class SpecParser { +import edu.uci.eecs.specCompiler.specExtraction.Construct; +import edu.uci.eecs.specCompiler.specExtraction.GlobalConstruct; +import edu.uci.eecs.specCompiler.specExtraction.InterfaceConstruct; +import edu.uci.eecs.specCompiler.specExtraction.PotentialCPDefineConstruct; +import edu.uci.eecs.specCompiler.specExtraction.CPDefineConstruct; +import edu.uci.eecs.specCompiler.specExtraction.CPDefineCheckConstruct; +import edu.uci.eecs.specCompiler.specExtraction.ConditionalInterface; + + public class SpecParser { public static void main(String[] argvs) throws ParseException, TokenMgrError { try { @@ -93,18 +104,17 @@ SKIP : "\r\n" | "\t" - /* | // "#" comment for the specification <"#" (~["\n", "\r"])* (["\n", "\r"])> | // "//" comment for the specification <"//" (~["\n", "\r"])* (["\n", "\r"])> - */ } TOKEN : { +/* Above are specification-only tokens */ | @@ -125,7 +135,7 @@ TOKEN : | | - + | | @@ -146,112 +156,342 @@ TOKEN : | + + +/* Specification & C/C++ shared tokens */ | <#DIGIT: ["0"-"9"]> | <#LETTER: ["a"-"z", "A"-"Z"]> | - ( | | "_")*> + | "_") ( | | "_")*> | + +| + +| + | - + | "> | + +| +/* C/C++ only token*/ + +| + +| + +| + +| + +| + +| + +| + +| + +| + +| + +| + +| + +| + "> +| + ="> +| + +| + +| + +| + +| + +| + +| + +| + +| + +| + < INTEGER_LITERAL: + (["l","L"])? + | (["l","L"])? + | (["l","L"])?> +| + < #DECIMAL_LITERAL: ["1"-"9"] (["0"-"9"])* > +| + < #HEX_LITERAL: "0" ["x","X"] (["0"-"9","a"-"f","A"-"F"])+ > +| + < #OCTAL_LITERAL: "0" (["0"-"7"])* > +| + < FLOATING_POINT_LITERAL: + + | > +| + < #DECIMAL_FLOATING_POINT_LITERAL: + (["0"-"9"])+ "." (["0"-"9"])* ()? (["f","F","d","D"])? + | "." (["0"-"9"])+ ()? (["f","F","d","D"])? + | (["0"-"9"])+ (["f","F","d","D"])? + | (["0"-"9"])+ ()? ["f","F","d","D"]> +| + < #DECIMAL_EXPONENT: ["e","E"] (["+","-"])? (["0"-"9"])+ > +| + < #HEXADECIMAL_FLOATING_POINT_LITERAL: + "0" ["x", "X"] (["0"-"9","a"-"f","A"-"F"])+ (".")? (["f","F","d","D"])? + | "0" ["x", "X"] (["0"-"9","a"-"f","A"-"F"])* "." (["0"-"9","a"-"f","A"-"F"])+ (["f","F","d","D"])?> +| + < #HEXADECIMAL_EXPONENT: ["p","P"] (["+","-"])? (["0"-"9"])+ > } -void Start() : -{} +Construct Start() : { - //Global_construct() - - // C_CPP_CODE() + Construct res; +} +{ + ( + LOOKAHEAD(3) res = Global_construct() | + LOOKAHEAD(3) res = Interface() | + LOOKAHEAD(3) res = Potential_commit_point_define() | + LOOKAHEAD(3) res = Commit_point_define() | + LOOKAHEAD(3) res = Commit_point_define_check() + ) + + { return res; } } -void Global_construct() : -{} +GlobalConstruct Global_construct() : { + GlobalConstruct res; + String code; +} +{ + { res = null; } - Global_define() (Interface_cluster())? (Happens_before())? + (code = Global_define()) + { res = new GlobalConstruct(code); } + (Interface_clusters(res))? + (Happens_before(res))? + { + res.unfoldInterfaceCluster(); + System.out.println(res); + return res; + } } -/* -void C_CPP_CODE() : -{} +String C_CPP_CODE() : { - <(~["@"])+> + StringBuilder text; + Token t; } -*/ -void Global_define() : -{} { - //C_CPP_CODE() + { + text = new StringBuilder(); + t = new Token(); + } + (( + t = | t = | t = | t = | + t = | t = | t = | t = | + t = | t = | t = | t = | t = | t = | t = | + t = | t = | t = | t = | t = | + t = | t = | t = | t = | + t = | t = | t = | t = | t = + t = | t = | t = | + t = | t = | t = | + t = | t = + ) + { + text.append(t.image); + if (t.image.equals(";") || t.image.equals("\\") + || t.image.equals("{") || t.image.equals("}")) + text.append("\n"); + else + text.append(" "); + } + )+ + { + //System.out.println(text); + return text.toString(); + } } -void Conditional_interface() : -{} +String Global_define() : { - (<"(" ")">)* + String code; +} +{ + (code = C_CPP_CODE()) + { + return code; + } } -void Interface_cluster() : -{} +ConditionalInterface Conditional_interface() : { - - Conditional_interface() ( Conditional_interface())* - + String interfaceName, hbConditionLabel; +} +{ + { + hbConditionLabel = ""; + } + interfaceName = .image ( hbConditionLabel = + .image )? + { + return new ConditionalInterface(interfaceName, hbConditionLabel); + } } -void Interface_clusters() : -{} +void Interface_cluster(GlobalConstruct inst) : { - (Interface_cluster())+ + String clusterName; + ConditionalInterface condInterface; +} +{ + (clusterName= .image) + + (condInterface = Conditional_interface() + { inst.addInterface2Cluster(clusterName, condInterface); } + ) + ( condInterface = Conditional_interface() + { inst.addInterface2Cluster(clusterName, condInterface); } + )* + } -void Happens_before() : +void Interface_clusters(GlobalConstruct inst) : {} { - (Conditional_interface() Conditional_interface())+ + (Interface_cluster(inst))+ } -void Interface() : -{} +void Happens_before(GlobalConstruct inst) : { + ConditionalInterface left, right; +} +{ + + ( + left = Conditional_interface() right = Conditional_interface() + { inst.addHBCondition(left, right); } + )+ +} + +InterfaceConstruct Interface() : +{ + InterfaceConstruct res; +} +{ + { res = null; } + + + + ( )* + ( C_CPP_CODE())? + ( C_CPP_CODE())* + ( C_CPP_CODE())? + ( C_CPP_CODE())? + ( C_CPP_CODE())? + ( C_CPP_CODE())? + ( C_CPP_CODE())? + + { return res; } } -void Potential_commit_point_define() : -{} +PotentialCPDefineConstruct Potential_commit_point_define() : +{ + PotentialCPDefineConstruct res; +} { + + { res = null; } - + + C_CPP_CODE() +