changes for arrays
[lwes-java.git] / src / main / javacc / ESFParser.jj
blobbacb3b52e5430b8b02fd6bd08a4480dbb62262a6
1 options {
2   DEBUG_PARSER=false;
3   DEBUG_LOOKAHEAD=false;
4   DEBUG_TOKEN_MANAGER=false;
5   STATIC=false;
8 PARSER_BEGIN(ESFParser)
10 package org.lwes.db;
12 import org.lwes.util.Log;
14 public class ESFParser
16   private String currentEvent;
17   private EventTemplateDB eventTemplateDB;
19   public void setEventTemplateDB(EventTemplateDB DB)
20     { eventTemplateDB = DB; }
22   public EventTemplateDB getEventTemplateDB()
23     { return eventTemplateDB; }
25   public void setCurrentEvent(String evt)
26     { currentEvent = evt; }
28   public String getCurrentEvent()
29     { return currentEvent; }
32 PARSER_END(ESFParser)
34 SKIP :
36   " "
37 | "\t"
38 | "\n"
39 | "\r"
40 | "#" : IN_LINE_COMMENT
43 <IN_LINE_COMMENT> SKIP:
45    "\n" : DEFAULT
46 |  "\r" : DEFAULT
47 |  "\r\n" : DEFAULT
50 <IN_LINE_COMMENT> MORE:
52   < ~[] >
56 TOKEN :
58     < ID: ["a"-"z","A"-"Z","_",":","0"-"9"] (["a"-"z","A"-"Z","_",":","0"-"9"])* >
59   | < LBRACKET: "[" >
60   | < RBRACKET: "]" >
63 /**
64  * A list of events
65  */
66 void eventlist() :
70   event() ( event() )* <EOF>
73 /**
74  * a single event
75  */
76 void event() :
80   eventName() "{" [ attributeList() ] "}"
83 /**
84  * The name of an event, should be max 256 chars ([a-zA-Z0-9_]*)
85  */
86 void eventName() :
88   Token t;
91   t=<ID>
92   {
93     if ( getEventTemplateDB().addEvent(t.image))
94     {
95       setCurrentEvent(t.image);
96     }
97     else
98     {
99       throw new ParseException("Problem adding event "+t.image);
100     }
101   }
104 void attributeList() :
107   attribute() ( attribute() )*
110 int arraySize() :
112   Token t;
115     t = <ID>
116     {
117     return Integer.parseInt(t.image);
118     }
121 void attribute() :
123   String aType;
124   String anAttribute;
125   int anArraySize = 0;
128   aType=type() anAttribute=attributeName() [ "[" anArraySize = arraySize() "]" ] ";" {
129       if ( !( aType.equals("uint16")  ||
130               aType.equals("int16")   ||
131               aType.equals("uint32")  ||
132               aType.equals("int32")   ||
133               aType.equals("string")  ||
134               aType.equals("ip_addr") ||
135               aType.equals("int64")   ||
136               aType.equals("uint64")  ||
137               aType.equals("byte")    ||
138               aType.equals("boolean")
139             )
140          )
141        {
142          throw new ParseException("No such type '"+aType+"'");
143        }
145       String evt = getCurrentEvent();
146       if ( evt == null ) throw new ParseException("Bad Event");
148       if (anArraySize > 0) {
149          if (Log.isLogTrace()) {
150            Log.trace("ARRAY! type: "+aType+" attr: "+anAttribute+" size: "+anArraySize);
151          }
152          aType = "[L"+aType;
153        }
155       if ( !getEventTemplateDB().addEventAttribute(evt, anAttribute, aType, anArraySize))
156       {
157         throw new ParseException("Problem adding attribute "+evt+"("
158                                  +aType+","+anAttribute+")");
159       }
160    }
163 String type() :
165   Token t;
168   t=<ID>
169   {
170     return t.image;
171   }
174 String attributeName() :
176   Token t;
179   t=<ID>
180   {
181     return t.image;
182   }