X-Git-Url: http://plrg.eecs.uci.edu/git/?a=blobdiff_plain;f=grammer%2Fspec-compiler.jj;h=f7a4248d377c41f64cb7ef3c7b69009e29432d18;hb=d821fcb5090481c9a4a0d93918446ce02022b89e;hp=45960880b935606614470f42822555d1aea74a53;hpb=542a00635aafcb2b664e4d15be95f11df7ff0c81;p=cdsspec-compiler.git diff --git a/grammer/spec-compiler.jj b/grammer/spec-compiler.jj index 4596088..f7a4248 100644 --- a/grammer/spec-compiler.jj +++ b/grammer/spec-compiler.jj @@ -1,5 +1,61 @@ /* spec-compiler.jj Grammer definition for the specification */ + +/* + SPEC constructs: + Each construct should be embraced by /DOUBLE_STAR ... STAR/ annotation. + Within there, any line beginning with a "#" is a comment of the annotation. + Each constrcut should begin with @Begin and end with @End. Otherwise, the + annotation would be considered as normal comments of the source. + + a) Global construct + @Begin + @Global_define: + ... + @Interface_cluster: + ... + @Happens-before: + ... + @End + + b) Interface construct + @Begin + @Interface: ... + @Commit_point_set: + ... + @Condition: ... (Optional) + @ID: ... (Optional, use default ID) + @Check: (Optional) + ... + @Action: (Optional) + ... + @Post_action: (Optional) + @Post_check: (Optional) + @End + + c) Potential commit construct + @Begin + @Potential_commit_point_define: ... + @Label: ... + @End + + d) Commit point define construct + @Begin + @Commit_point_define_check: ... + @Label: ... + @End + + OR + + @Begin + @Commit_point_define: ... + @Potential_commit_point_label: ... + @Label: ... + @End +*/ + + + options { STATIC = false; JAVA_UNICODE_ESCAPE = true; @@ -8,24 +64,47 @@ options { PARSER_BEGIN(SpecParser) package edu.uci.eecs.specCompiler.grammerParser; +import java.io.FileInputStream; +import java.io.FileNotFoundException; + class SpecParser { public static void main(String[] argvs) throws ParseException, TokenMgrError { - SpecParser parser = new SpecParser(System.in); - parser.Start(); - System.out.println("Parsing finished!"); + try { + FileInputStream fis = new FileInputStream("./grammer/spec.txt"); + SpecParser parser = new SpecParser(fis); + parser.Start(); + System.out.println("Parsing finished!"); + } catch (FileNotFoundException e) { + e.printStackTrace(); + } } } PARSER_END(SpecParser) -SKIP : {" " | "\n" | "\r" | "\r\n" | } - -TOKEN : +SKIP : { - + " " +| + "\n" +| + "\r" +| + "\r\n" +| + "\t" + /* | - "#" (~["\n", "\r"])* ["\n", "\r"]> + // "#" comment for the specification + <"#" (~["\n", "\r"])* (["\n", "\r"])> | + // "//" comment for the specification + <"//" (~["\n", "\r"])* (["\n", "\r"])> + */ +} + +TOKEN : +{ | @@ -34,11 +113,132 @@ TOKEN : | | - + +| + +| + +| + +| + +| + +| + +| + +| + +| + +| + +| + +| + +| + +| + +| + +| + +| + <#DIGIT: ["0"-"9"]> +| + <#LETTER: ["a"-"z", "A"-"Z"]> +| + ( | | "_")> } void Start() : {} { - + //Global_construct() + + // +} + +void Global_construct() : +{} +{ + + + //Global_define() (Interface_cluster())? (Happens_before())? + + +} + +void C_CPP_CODE() : +{String code;} +{ + <(~["@"])+> +} + +void Global_define() : +{} +{ + C_CPP_CODE() +} + +void Conditional_interface() : +{} +{ + (<"(" ")"> | "") +} + +void Interface_cluster() : +{} +{ + "=" "{" Conditional_interface() (",," Conditional_interface())* "}" +} + +void Interface_clusters() : +{} +{ + (Interface_cluster())+ +} + +void Happens_before() : +{} +{ + (Conditional_interface() "->" Conditional_interface())+ +} + +void Interface() : +{} +{ + +} + +void Potential_commit_point_define() : +{} +{ + + + + +} + + +void Commit_point_define() : +{} +{ + + + + +} + + +void Commit_point_define_check() : +{} +{ + + + + }