More lexer/parser work.

This commit is contained in:
Matthias Vallentin 2012-12-07 22:17:59 -10:00
parent 2494940d95
commit 622190b4ef
2 changed files with 16 additions and 6 deletions

View file

@ -11,11 +11,12 @@
%token TOK_DOUBLE TOK_ELSE TOK_ENUM TOK_EVENT TOK_EXPORT TOK_FILE TOK_FOR %token TOK_DOUBLE TOK_ELSE TOK_ENUM TOK_EVENT TOK_EXPORT TOK_FILE TOK_FOR
%token TOK_FUNCTION TOK_GLOBAL TOK_HOOK TOK_ID TOK_IF TOK_INT %token TOK_FUNCTION TOK_GLOBAL TOK_HOOK TOK_ID TOK_IF TOK_INT
%token TOK_INTERVAL TOK_LIST TOK_LOCAL TOK_MODULE %token TOK_INTERVAL TOK_LIST TOK_LOCAL TOK_MODULE
%token TOK_NEXT TOK_OF TOK_OPAQUE TOK_PATTERN TOK_PATTERN_TEXT %token TOK_NEXT TOK_OF TOK_PATTERN TOK_PATTERN_TEXT
%token TOK_PORT TOK_PRINT TOK_RECORD TOK_REDEF %token TOK_PORT TOK_PRINT TOK_RECORD TOK_REDEF
%token TOK_REMOVE_FROM TOK_RETURN TOK_SCHEDULE TOK_SET %token TOK_REMOVE_FROM TOK_RETURN TOK_SCHEDULE TOK_SET
%token TOK_STRING TOK_SUBNET TOK_SWITCH TOK_TABLE %token TOK_STRING TOK_SUBNET TOK_SWITCH TOK_TABLE
%token TOK_TIME TOK_TIMEOUT TOK_TIMER TOK_TYPE TOK_UNION TOK_VECTOR TOK_WHEN %token TOK_TIME TOK_TIMEOUT TOK_TIMER TOK_TYPE TOK_UNION TOK_VECTOR TOK_WHEN
%token TOK_OPAQUE TOK_OPAQUE_MD5 TOK_OPAQUE_HYPERLOGLOG
%token TOK_ATTR_ADD_FUNC TOK_ATTR_ATTR TOK_ATTR_ENCRYPT TOK_ATTR_DEFAULT %token TOK_ATTR_ADD_FUNC TOK_ATTR_ATTR TOK_ATTR_ENCRYPT TOK_ATTR_DEFAULT
%token TOK_ATTR_OPTIONAL TOK_ATTR_REDEF TOK_ATTR_ROTATE_INTERVAL %token TOK_ATTR_OPTIONAL TOK_ATTR_REDEF TOK_ATTR_ROTATE_INTERVAL
@ -46,7 +47,7 @@
%left '$' '[' ']' '(' ')' TOK_HAS_FIELD TOK_HAS_ATTR %left '$' '[' ']' '(' ')' TOK_HAS_FIELD TOK_HAS_ATTR
%type <b> opt_no_test opt_no_test_block %type <b> opt_no_test opt_no_test_block
%type <str> TOK_ID TOK_PATTERN_TEXT single_pattern TOK_DOC TOK_POST_DOC %type <str> TOK_ID TOK_PATTERN_TEXT single_pattern TOK_DOC TOK_POST_DOC opaque_id
%type <str_l> opt_doc_list opt_post_doc_list %type <str_l> opt_doc_list opt_post_doc_list
%type <id> local_id global_id def_global_id event_id global_or_event_id resolve_id begin_func %type <id> local_id global_id def_global_id event_id global_or_event_id resolve_id begin_func
%type <id_l> local_id_list %type <id_l> local_id_list
@ -565,7 +566,6 @@ expr:
id->SetType(error_type()); id->SetType(error_type());
$$ = new NameExpr(id); $$ = new NameExpr(id);
} }
else if ( id->IsEnumConst() ) else if ( id->IsEnumConst() )
{ {
EnumType* t = id->Type()->AsEnumType(); EnumType* t = id->Type()->AsEnumType();
@ -890,10 +890,10 @@ type:
$$ = new FileType(base_type(TYPE_STRING)); $$ = new FileType(base_type(TYPE_STRING));
} }
| TOK_OPAQUE TOK_OF TOK_ID | TOK_OPAQUE TOK_OF opaque_id
{ {
set_location(@1, @3); set_location(@1, @3);
$$ = new OpaqueType($3); $$ = new OpaqueType(@3);
} }
| resolve_id | resolve_id
@ -910,6 +910,13 @@ type:
} }
; ;
opaque_id:
TOK_OPAQUE_MD5
{ }
| TOK_OPAQUE_HYPERLOGLOG
{ }
;
type_list: type_list:
type_list ',' type type_list ',' type
{ $1->AppendEvenIfNotPure($3); } { $1->AppendEvenIfNotPure($3); }

View file

@ -298,7 +298,6 @@ local return TOK_LOCAL;
module return TOK_MODULE; module return TOK_MODULE;
next return TOK_NEXT; next return TOK_NEXT;
of return TOK_OF; of return TOK_OF;
opaque return TOK_OPAQUE;
pattern return TOK_PATTERN; pattern return TOK_PATTERN;
port return TOK_PORT; port return TOK_PORT;
print return TOK_PRINT; print return TOK_PRINT;
@ -319,6 +318,10 @@ union return TOK_UNION;
vector return TOK_VECTOR; vector return TOK_VECTOR;
when return TOK_WHEN; when return TOK_WHEN;
opaque return TOK_OPAQUE;
md5 return TOK_OPAQUE_MD5;
hyper-log-log return TOK_OPAQUE_HYPERLOGLOG;
&add_func return TOK_ATTR_ADD_FUNC; &add_func return TOK_ATTR_ADD_FUNC;
&attr return TOK_ATTR_ATTR; &attr return TOK_ATTR_ATTR;
&create_expire return TOK_ATTR_EXPIRE_CREATE; &create_expire return TOK_ATTR_EXPIRE_CREATE;