parsing basically works
[cdsspec-compiler.git] / grammer / spec-compiler.jj
index bfcd6b99825b7c67e90facd45552b29ddae044a3..4a7d11a871df83c963082c303ce71424f3ec624e 100644 (file)
@@ -24,7 +24,8 @@
        @Commit_point_set:
                IDENTIFIER | IDENTIFIER ...
        @Condition: ... (Optional)
-       @HB_Condition: ...
+       @HB_Condition:
+               IDENTIFIER :: <C_CPP_Condition>
        @HB_Condition: ...
        @ID: ... (Optional, use default ID)
        @Check: (Optional)
@@ -200,10 +201,26 @@ TOKEN :
        <LESS_THAN: "<">
 |
        <GREATER_THAN: ">">
+|
+       <GREATER_EQUALS: ">=">
+|
+       <LESS_EQUALS: "<=">
+|
+       <LOGICAL_EQUALS: "==">
+|
+       <NOT_EQUALS: "!=">
+|
+       <LOGICAL_AND: "&&">
+|
+       <LOGICAL_OR: "||">
+|
+       <XOR: "^">
 |
        <QUESTION_MARK: "?">
 |
        <COLON: ":">
+|
+       <DOUBLECOLON: "::">
 |
        <SEMI_COLON: ";">
 |
@@ -302,13 +319,19 @@ String C_CPP_CODE() :
        t = <OPEN_BRACKET> | t = <CLOSE_BRACKET> | t = <HB_SYMBOL> | t = <COMMA> |
        t = <DOT> | t = <STAR> | t = <NEGATE> | t = <AND> | t = <OR> | t = <MOD> | t = <PLUS> |
        t = <PLUSPLUS> | t = <MINUS> | t = <MINUSMINUS> | t = <DIVIDE> | t = <BACKSLASH> |
-       t = <LESS_THAN> | t = <GREATER_THAN> | t = <QUESTION_MARK> | t = <COLON> |
+       t = <LESS_THAN> | t = <GREATER_THAN> | t = <GREATER_EQUALS>     | t = <LESS_EQUALS> |
+       t = <LOGICAL_EQUALS> | t = <NOT_EQUALS> | t = <LOGICAL_AND> | t = <LOGICAL_OR> | t = <XOR>
+       t = <QUESTION_MARK> | t = <COLON> | t = <DOUBLECOLON> |
        t = <SEMI_COLON> | t = <STRING_LITERAL> | t = <CHARACTER_LITERAL> |
        t = <INTEGER_LITERAL> | t = <FLOATING_POINT_LITERAL>
        )
        {
                text.append(t.image);
-               text.append("\n");
+               if (t.image.equals(";") || t.image.equals("\\")
+                       || t.image.equals("{") || t.image.equals("}"))
+                       text.append("\n");
+               else
+                       text.append(" ");
        }
        )+
        {
@@ -357,7 +380,7 @@ void Interface() :
                        <INTERFACE> <IDENTIFIER>
                        <COMMIT_POINT_SET> <IDENTIFIER> (<OR> <IDENTIFIER>)*
                        (<CONDITION> C_CPP_CODE())?
-                       (<HB_CONDITION> C_CPP_CODE())*
+                       (<HB_CONDITION> <IDENTIFIER> C_CPP_CODE())*
                        (<ID> C_CPP_CODE())?
                        (<CHECK> C_CPP_CODE())?
                        (<ACTION> C_CPP_CODE())?