Author: chirino
Date: Fri Aug 29 14:34:08 2008
New Revision: 690397

URL: http://svn.apache.org/viewvc?rev=690397&view=rev
Log:
Updated parser so it can successfully parse all the unit test proto files.  
Generator is still in progress.

Added:
    
activemq/sandbox/activemq-protobuf/activemq-protobuf/src/main/java/org/apache/activemq/protobuf/compiler/GroupDescriptor.java
Modified:
    
activemq/sandbox/activemq-protobuf/activemq-protobuf/src/main/java/org/apache/activemq/protobuf/compiler/MessageDescriptor.java
    
activemq/sandbox/activemq-protobuf/activemq-protobuf/src/main/java/org/apache/activemq/protobuf/compiler/ProtoMojo.java
    
activemq/sandbox/activemq-protobuf/activemq-protobuf/src/main/javacc/proto-parser.jj

Added: 
activemq/sandbox/activemq-protobuf/activemq-protobuf/src/main/java/org/apache/activemq/protobuf/compiler/GroupDescriptor.java
URL: 
http://svn.apache.org/viewvc/activemq/sandbox/activemq-protobuf/activemq-protobuf/src/main/java/org/apache/activemq/protobuf/compiler/GroupDescriptor.java?rev=690397&view=auto
==============================================================================
--- 
activemq/sandbox/activemq-protobuf/activemq-protobuf/src/main/java/org/apache/activemq/protobuf/compiler/GroupDescriptor.java
 (added)
+++ 
activemq/sandbox/activemq-protobuf/activemq-protobuf/src/main/java/org/apache/activemq/protobuf/compiler/GroupDescriptor.java
 Fri Aug 29 14:34:08 2008
@@ -0,0 +1,20 @@
+package org.apache.activemq.protobuf.compiler;
+
+import java.util.Map;
+
+public class GroupDescriptor extends FieldDescriptor {
+    private Map<String,FieldDescriptor> fields;
+
+    public GroupDescriptor(ProtoDescriptor protoDescriptor) {
+        super(protoDescriptor);
+    }
+
+    public Map<String, FieldDescriptor> getFields() {
+        return fields;
+    }
+
+    public void setFields(Map<String, FieldDescriptor> fields) {
+        this.fields = fields;
+    }
+
+}

Modified: 
activemq/sandbox/activemq-protobuf/activemq-protobuf/src/main/java/org/apache/activemq/protobuf/compiler/MessageDescriptor.java
URL: 
http://svn.apache.org/viewvc/activemq/sandbox/activemq-protobuf/activemq-protobuf/src/main/java/org/apache/activemq/protobuf/compiler/MessageDescriptor.java?rev=690397&r1=690396&r2=690397&view=diff
==============================================================================
--- 
activemq/sandbox/activemq-protobuf/activemq-protobuf/src/main/java/org/apache/activemq/protobuf/compiler/MessageDescriptor.java
 (original)
+++ 
activemq/sandbox/activemq-protobuf/activemq-protobuf/src/main/java/org/apache/activemq/protobuf/compiler/MessageDescriptor.java
 Fri Aug 29 14:34:08 2008
@@ -29,6 +29,7 @@
     private Map<String,EnumDescriptor> enums;
     private final ProtoDescriptor protoDescriptor;
     private List<ExtendDescriptor> extendsList;
+    private Map<String, OptionDescriptor> options;
 
     public MessageDescriptor(ProtoDescriptor protoDescriptor) {
         this.protoDescriptor = protoDescriptor;
@@ -90,4 +91,12 @@
         
     }
 
+    public Map<String, OptionDescriptor> getOptions() {
+        return options;
+    }
+
+    public void setOptions(Map<String, OptionDescriptor> options) {
+        this.options = options;
+    }
+
 }

Modified: 
activemq/sandbox/activemq-protobuf/activemq-protobuf/src/main/java/org/apache/activemq/protobuf/compiler/ProtoMojo.java
URL: 
http://svn.apache.org/viewvc/activemq/sandbox/activemq-protobuf/activemq-protobuf/src/main/java/org/apache/activemq/protobuf/compiler/ProtoMojo.java?rev=690397&r1=690396&r2=690397&view=diff
==============================================================================
--- 
activemq/sandbox/activemq-protobuf/activemq-protobuf/src/main/java/org/apache/activemq/protobuf/compiler/ProtoMojo.java
 (original)
+++ 
activemq/sandbox/activemq-protobuf/activemq-protobuf/src/main/java/org/apache/activemq/protobuf/compiler/ProtoMojo.java
 Fri Aug 29 14:34:08 2008
@@ -77,11 +77,12 @@
         List<File> recFiles = Arrays.asList(files);
         for (File file : recFiles) {
             try {
+                getLog().info("Compiling: "+file.getPath());
                 JavaGenerator generator = new JavaGenerator();
                 generator.setOutputDirectory(outputDirectory);
                 generator.compile(file);
             } catch (ParseException e) {
-                throw new MojoExecutionException("Parse failed: " + 
e.getMessage(), e);
+                throw new MojoExecutionException("Parse failed: 
"+file.getPath()+"\n"+ e.getMessage(), e);
             } catch (CompilerException e) {
                 throw new MojoExecutionException("Compile failed", e);
             } catch (IOException e) {

Modified: 
activemq/sandbox/activemq-protobuf/activemq-protobuf/src/main/javacc/proto-parser.jj
URL: 
http://svn.apache.org/viewvc/activemq/sandbox/activemq-protobuf/activemq-protobuf/src/main/javacc/proto-parser.jj?rev=690397&r1=690396&r2=690397&view=diff
==============================================================================
--- 
activemq/sandbox/activemq-protobuf/activemq-protobuf/src/main/javacc/proto-parser.jj
 (original)
+++ 
activemq/sandbox/activemq-protobuf/activemq-protobuf/src/main/javacc/proto-parser.jj
 Fri Aug 29 14:34:08 2008
@@ -95,6 +95,7 @@
   | <REPEATED:"repeated">
   | <RETURNS:"returns">
   | <TO:"to">
+  | <MAX:"max">
 
   | <LBRACE: "{">
   | <RBRACE: "}">
@@ -107,8 +108,33 @@
   | <PERIOD: ".">
   | <COMMA: ",">
   
-  | <NUMBER: (["0"-"9"])+>
-  | <STRING: "\"" ( ~["\""] )+ "\"">
+  | < INTEGER: ("-")? (
+        <DECIMAL_LITERAL> (["l","L"])?
+      | <HEX_LITERAL> (["l","L"])?
+      | <OCTAL_LITERAL> (["l","L"])? 
+    ) >
+  | < #DECIMAL_LITERAL: ["1"-"9"] (["0"-"9"])* >
+  | < #HEX_LITERAL: "0" ["x","X"] (["0"-"9","a"-"f","A"-"F"])+ >
+  | < #OCTAL_LITERAL: "0" (["0"-"7"])* >
+  | < FLOAT: ("-")? (
+        (["0"-"9"])+ "." (["0"-"9"])* (<EXPONENT>)? (["f","F","d","D"])?
+      | "." (["0"-"9"])+ (<EXPONENT>)? (["f","F","d","D"])?
+      | (["0"-"9"])+ <EXPONENT> (["f","F","d","D"])?
+      | (["0"-"9"])+ (<EXPONENT>)? ["f","F","d","D"]
+    )>
+  | < #EXPONENT: ["e","E"] (["+","-"])? (["0"-"9"])+ >
+  | <STRING:
+      "\""
+      (   (~["\"","\\","\n","\r"])
+        | ("\\"
+            ( ["a","v","n","t","b","r","f","\\","'","\""]
+            | ["x","X"]["0"-"9","A"-"F","a"-"f"]["0"-"9","A"-"F","a"-"f"]
+            | ["0"-"7"] ( ["0"-"7"] )?
+            | ["0"-"3"] ["0"-"7"] ["0"-"7"]
+            )
+          )
+      )*
+      "\"">
   | <ID: ["A"-"Z","a"-"z"] (["a"-"z","A"-"Z","0"-"9","_"])*>
 }
 
@@ -131,10 +157,9 @@
     String o;
 }
 {
-       (
-               <PACKAGE> packageName=PackageID() <SEMICOLON>
-       )?
     (
+               <PACKAGE> packageName=PackageID() <SEMICOLON>
+       |       
         <OPTION> optionD = OptionDescriptor(proto) <SEMICOLON>
         { opts.put(optionD.getName(),optionD); }
     |   
@@ -168,6 +193,138 @@
     }
 }
 
+
+MessageDescriptor MessageDescriptor(ProtoDescriptor proto) :
+{
+    String name;
+    LinkedHashMap<String,FieldDescriptor> fields = new 
LinkedHashMap<String,FieldDescriptor>();
+    LinkedHashMap<String,MessageDescriptor> messages = new 
LinkedHashMap<String,MessageDescriptor>();
+    LinkedHashMap<String,EnumDescriptor> enums = new 
LinkedHashMap<String,EnumDescriptor>();
+    ArrayList<ExtendDescriptor> extendsList = new 
ArrayList<ExtendDescriptor>();
+    LinkedHashMap<String,OptionDescriptor> opts = new 
LinkedHashMap<String,OptionDescriptor>();
+
+    OptionDescriptor optionD;
+    ExtensionsDescriptor extensionsD=null;
+       FieldDescriptor fieldD;
+       MessageDescriptor messageD;
+       EnumDescriptor enumD;
+       ExtendDescriptor extendD;
+}
+{
+    <MESSAGE> name = ID() <LBRACE>
+    (
+        <OPTION> optionD = OptionDescriptor(proto) <SEMICOLON>
+        { opts.put(optionD.getName(),optionD); }
+       |       
+       fieldD = FieldDescriptor(proto)
+       { fields.put(fieldD.getName(), fieldD); }
+    |   
+        messageD = MessageDescriptor(proto) (<SEMICOLON>)?
+        { messages.put(messageD.getName(),messageD); }
+    |   
+        enumD = EnumDescriptor(proto) (<SEMICOLON>)?
+        { enums.put(enumD.getName(), enumD); }
+    |   
+        extensionsD = ExtensionsDescriptor(proto) <SEMICOLON>
+    |   
+        extendD = ExtendDescriptor(proto) (<SEMICOLON>)?
+        { extendsList.add(extendD); }
+    )*
+    <RBRACE>
+    {
+       MessageDescriptor rc = new MessageDescriptor(proto);
+       rc.setName(name);
+       rc.setFields(fields);
+       rc.setMessages(messages);
+       rc.setEnums(enums);
+       rc.setExtensions(extensionsD);
+       rc.setOptions(opts);
+       return rc;
+    }
+}
+
+/**
+ * Parses something like:
+ * optional string foo = 1;
+ */
+FieldDescriptor FieldDescriptor(ProtoDescriptor proto) :
+{
+    String rule;
+    String type;
+    String name;
+    int tag;
+    LinkedHashMap<String,OptionDescriptor> opts = new 
LinkedHashMap<String,OptionDescriptor>();
+    LinkedHashMap<String,FieldDescriptor> fields = new 
LinkedHashMap<String,FieldDescriptor>();
+    OptionDescriptor optionD;
+       FieldDescriptor fieldD;
+       FieldDescriptor rc;
+}
+{
+
+    rule = Rule()
+    (
+        // We have to go through the look ahead trouble because based on if 
'type' is 'group' 
+        // we need to look ahead to see if it looks like a group declaration 
instead it being 
+        // message type called group.
+        
+           LOOKAHEAD(5)
+               type = PackageID()
+           name = ID()
+           <EQUALS>
+           tag = Integer()
+           (
+               <LBRACKET>
+               optionD = OptionDescriptor(proto)
+               {
+                       opts.put(optionD.getName(), optionD);
+               }
+               (
+                       <COMMA>
+                       optionD = OptionDescriptor(proto)
+                       {
+                               opts.put(optionD.getName(), optionD);
+                       }
+               )*
+               <RBRACKET>
+           )?
+           <SEMICOLON>    
+           {
+               FieldDescriptor t = new FieldDescriptor(proto);
+               t.setName(name);
+               t.setType(type);
+               t.setRule(rule);
+               t.setTag(tag);
+               t.setOptions(opts);
+               rc=t;
+           }
+       |
+               <GROUP>
+           name = ID()
+           <EQUALS>
+           tag = Integer()
+           <LBRACE>
+           (
+               fieldD = FieldDescriptor(proto)
+               { fields.put(fieldD.getName(), fieldD); }
+           )*
+           <RBRACE> 
+           ( <SEMICOLON> )?  
+           {
+               GroupDescriptor t = new GroupDescriptor(proto);
+               t.setName(name);
+               t.setType("group");
+               t.setRule(rule);
+               t.setTag(tag);
+               t.setOptions(opts);
+               t.setFields(fields);
+               rc=t;
+           }
+    )
+    {
+               return rc;
+    }
+}
+
 ServiceDescriptor ServiceDescriptor(ProtoDescriptor proto) :
 {
     String name;
@@ -246,49 +403,6 @@
     }
 }
 
-MessageDescriptor MessageDescriptor(ProtoDescriptor proto) :
-{
-    String name;
-    LinkedHashMap<String,FieldDescriptor> fields = new 
LinkedHashMap<String,FieldDescriptor>();
-    LinkedHashMap<String,MessageDescriptor> messages = new 
LinkedHashMap<String,MessageDescriptor>();
-    LinkedHashMap<String,EnumDescriptor> enums = new 
LinkedHashMap<String,EnumDescriptor>();
-    ArrayList<ExtendDescriptor> extendsList = new 
ArrayList<ExtendDescriptor>();
-
-    ExtensionsDescriptor extensionsD=null;
-       FieldDescriptor fieldD;
-       MessageDescriptor messageD;
-       EnumDescriptor enumD;
-       ExtendDescriptor extendD;
-}
-{
-    <MESSAGE> name = ID() <LBRACE>
-    (
-       fieldD = FieldDescriptor(proto) <SEMICOLON>
-       { fields.put(fieldD.getName(), fieldD); }
-    |   
-        messageD = MessageDescriptor(proto) (<SEMICOLON>)?
-        { messages.put(messageD.getName(),messageD); }
-    |   
-        enumD = EnumDescriptor(proto) (<SEMICOLON>)?
-        { enums.put(enumD.getName(), enumD); }
-    |   
-        extensionsD = ExtensionsDescriptor(proto) <SEMICOLON>
-    |   
-        extendD = ExtendDescriptor(proto) (<SEMICOLON>)?
-        { extendsList.add(extendD); }
-    )*
-    <RBRACE>
-    {
-       MessageDescriptor rc = new MessageDescriptor(proto);
-       rc.setName(name);
-       rc.setFields(fields);
-       rc.setMessages(messages);
-       rc.setEnums(enums);
-       rc.setExtensions(extensionsD);
-       return rc;
-    }
-}
-
 ExtensionsDescriptor ExtensionsDescriptor(ProtoDescriptor proto) :
 {
        int first;
@@ -298,7 +412,14 @@
     <EXTENSIONS> 
     first = Integer() 
     <TO> 
-    last = Integer() 
+    (
+       last = Integer()
+       |
+       <MAX>
+       {
+               last=536870911;
+       }
+    )
     {
        ExtensionsDescriptor rc = new ExtensionsDescriptor(proto);
        rc.setFirst(first);
@@ -352,58 +473,12 @@
     }
 }
 
-/**
- * Parses something like:
- * optional string foo = 1;
- */
-FieldDescriptor FieldDescriptor(ProtoDescriptor proto) :
-{
-    String rule;
-    String type;
-    String name;
-    int tag;
-    LinkedHashMap<String,OptionDescriptor> opts = new 
LinkedHashMap<String,OptionDescriptor>();
-    OptionDescriptor optionD;
-}
-{
-
-    rule = Rule()
-    type = PackageID()
-    name = ID()
-    <EQUALS>
-    tag = Integer()
-    (
-       <LBRACKET>
-       optionD = OptionDescriptor(proto)
-       {
-               opts.put(optionD.getName(), optionD);
-       }
-       (
-               <COMMA>
-               optionD = OptionDescriptor(proto)
-               {
-                       opts.put(optionD.getName(), optionD);
-               }
-       )*
-       <RBRACKET>
-    )?    
-    {
-       FieldDescriptor rc = new FieldDescriptor(proto);
-       rc.setName(name);
-       rc.setType(type);
-       rc.setRule(rule);
-       rc.setTag(tag);
-       rc.setOptions(opts);
-       return rc;
-    }
-}
-
 int Integer() :
 {
     Token t;
 }
 {
-       t = <NUMBER>
+       t = <INTEGER>
     {
        return Integer.parseInt(t.image);
     }
@@ -429,6 +504,7 @@
 
 String Value() :
 {
+    Token t;
     String value=null;
 }
 {
@@ -436,6 +512,16 @@
        value = StringLitteral()
        |
                value = ID()
+               |
+               t = <INTEGER>
+               {
+                       value = t.image;
+               }
+               |
+               t = <FLOAT>
+               {
+                       value = t.image;
+               }
     )
     {
        return value;
@@ -449,6 +535,7 @@
 {
     (
           t = <ID>
+        | t = <GROUP>
         | t = <IMPORT>
         | t = <PACKAGE>
         | t = <SERVICE>
@@ -458,12 +545,12 @@
         | t = <EXTENSIONS>
         | t = <EXTEND>
         | t = <ENUM>
-        | t = <GROUP>
         | t = <REQURIED>
         | t = <OPTIONAL>
         | t = <REPEATED>
         | t = <RETURNS>
         | t = <TO>
+        | t = <MAX>
     )
     {
        return t.image;
@@ -476,21 +563,23 @@
     StringBuffer sb = new StringBuffer();
 }
 {
-    t = ID()
-    {
-       sb.append(t);
-    }
-    (
-       <PERIOD>
-       t=ID()
-       {
-               sb.append(".");
-               sb.append(t);
-       }
-    )* 
-    {
-           return sb.toString();
-    }    
+       (
+           t = ID()
+           {
+               sb.append(t);
+           }
+           (
+               <PERIOD>
+               t=ID()
+               {
+                       sb.append(".");
+                       sb.append(t);
+               }
+           )*
+       )
+       {
+               return sb.toString();
+       }
 }
 
 


Reply via email to