Add new XML parser from genevent
[lttv.git] / ltt / branches / poly / ltt / parser.h
index 5e0c421bb7eae2b1e7104ae9ae5d82ff4b19858c..da5a303da5ab4fdfcd9e3b799aeb4984e02b17be 100644 (file)
@@ -34,10 +34,9 @@ void *table_find_int(table *t, int *key);
 
 typedef enum _token_type {
   ENDFILE,
-  COMA,
-  LPARENTHESIS,
-  RPARENTHESIS,
-  SEMICOLON,
+  FORWARDSLASH,
+  LANGLEBRACKET,
+  RANGLEBRACKET,
   EQUAL,
   QUOTEDSTRING,
   NUMBER,
@@ -58,19 +57,17 @@ typedef struct _parse_file {
 
 void ungetToken(parse_file * in);
 char *getToken(parse_file *in);
-char *getComa(parse_file *in);
-char *getLParenthesis(parse_file *in);
-char *getRParenthesis(parse_file *in);
-char *getSemiColon(parse_file *in);
+char *getForwardslash(parse_file *in);
+char *getLAnglebracket(parse_file *in);
+char *getRAnglebracket(parse_file *in);
 char *getQuotedString(parse_file *in);
 char *getName(parse_file *in);
-int getNumber(parse_file *in);
-char * getEqual(parse_file *in);
+int   getNumber(parse_file *in);
+char *getEqual(parse_file *in);
+char  seekNextChar(parse_file *in);
 
 void skipComment(parse_file * in);
 void skipEOL(parse_file * in);
-int isalpha(char car);
-int isalnum(char car);
 
 /* Some constants */
 
@@ -82,16 +79,22 @@ static const int BUFFER_SIZE = 1024;
 typedef enum _data_type {
   INT,
   UINT,
+       POINTER,
+       LONG,
+       ULONG,
+       SIZE_T,
+       SSIZE_T,
+       OFF_T,
   FLOAT,
   STRING,
   ENUM,
   ARRAY,
   SEQUENCE,
   STRUCT,
+  UNION,
   NONE
 } data_type;
 
-
 /* Event type descriptors */
 
 typedef struct _type_descriptor {
@@ -100,8 +103,11 @@ typedef struct _type_descriptor {
   char *fmt;
   int size;
   sequence labels; // for enumeration
+       sequence labels_description;
+       int     already_printed;
   sequence fields; // for structure
   struct _type_descriptor *nested_type; // for array and sequence 
+  int alignment;
 } type_descriptor;
 
 
@@ -120,12 +126,23 @@ typedef struct _event {
   char *name;
   char *description;
   type_descriptor *type; 
-  int nested;
+  int  per_trace;   /* Is the event able to be logged to a specific trace ? */
+  int  per_tracefile;  /* Must we log this event in a specific tracefile ? */
 } event;
 
+typedef struct _facility {
+  char * name;
+       char * capname;
+  char * description;
+  sequence events;
+  sequence unnamed_types;
+  table named_types;
+} facility;
+
 int getSize(parse_file *in);
-unsigned long getTypeChecksum(unsigned long aCrc, type_descriptor * type, int * nestedStruct);
+unsigned long getTypeChecksum(unsigned long aCrc, type_descriptor * type);
 
+void parseFacility(parse_file *in, facility * fac);
 void parseEvent(parse_file *in, event *ev, sequence * unnamed_types, table * named_types);
 void parseTypeDefinition(parse_file *in, sequence * unnamed_types, table * named_types);
 type_descriptor *parseType(parse_file *in, type_descriptor *t, sequence * unnamed_types, table * named_types);
@@ -135,6 +152,15 @@ type_descriptor * find_named_type(char *name, table * named_types);
 void generateChecksum(char * facName, unsigned long * checksum, sequence * events);
 
 
+/* get attributes */
+char * getNameAttribute(parse_file *in);
+char * getFormatAttribute(parse_file *in);
+int    getSizeAttribute(parse_file *in);
+int    getValueAttribute(parse_file *in);
+char * getValueStrAttribute(parse_file *in);
+
+char * getDescription(parse_file *in);
+
 
 static char *intOutputTypes[] = {
   "int8_t", "int16_t", "int32_t", "int64_t", "short int", "int", "long int" };
This page took 0.025566 seconds and 4 git commands to generate.