[cig-commits] r6987 - cs/spike/trunk
leif at geodynamics.org
leif at geodynamics.org
Mon May 28 17:24:45 PDT 2007
Author: leif
Date: 2007-05-28 17:24:45 -0700 (Mon, 28 May 2007)
New Revision: 6987
Modified:
cs/spike/trunk/gram.y
Log:
Reverted my recent simplifications to the grammar (r6535) -- I've
decided that they were a mistake (or at least irrelevant). Obsessing
over the syntax/grammar is such a distraction... :-(
Modified: cs/spike/trunk/gram.y
===================================================================
--- cs/spike/trunk/gram.y 2007-05-29 00:06:29 UTC (rev 6986)
+++ cs/spike/trunk/gram.y 2007-05-29 00:24:45 UTC (rev 6987)
@@ -177,8 +177,10 @@
;
declaration_specifiers
- : declspec { CHECK($$ = declaration_specifiers(Py_None, $1)); }
- | declaration_specifiers declspec { CHECK($$ = declaration_specifiers($1, $2)); }
+ : storage_class_specifier { CHECK($$ = declaration_specifiers($1, Py_None)); }
+ | storage_class_specifier declaration_specifiers { CHECK($$ = declaration_specifiers($1, $2)); }
+ | type_specifier { CHECK($$ = declaration_specifiers($1, Py_None)); }
+ | type_specifier declaration_specifiers { CHECK($$ = declaration_specifiers($1, $2)); }
;
init_declarator_list
@@ -191,13 +193,16 @@
| declarator '=' initializer
;
-declspec
+storage_class_specifier
: TYPEDEF
| EXTERN
| STATIC
| AUTO
| REGISTER
- | CHAR
+ ;
+
+type_specifier
+ : CHAR
| SHORT
| INT
| LONG
@@ -233,7 +238,7 @@
;
struct_declaration
- : declaration_specifiers struct_declarator_list ';'
+ : type_specifier_list struct_declarator_list ';'
;
struct_declarator_list
@@ -264,31 +269,31 @@
;
declarator
- : pointer { CHECK($$ = pointer_declarator($1, empty_declarator())); }
- | declarator2
+ : declarator2
| pointer declarator2 { CHECK($$ = pointer_declarator($1, $2)); }
;
declarator2
- : identifier { CHECK($$ = name_declarator($1)); }
- | '(' declarator ')' { $$ = $2; }
- | '[' ']' { CHECK($$ = array_declarator(empty_declarator(), Py_None)); }
- | '[' constant_expr ']' { CHECK($$ = array_declarator(empty_declarator(), $2)); }
- | declarator2 '[' ']' { CHECK($$ = array_declarator($1, Py_None)); }
+ : identifier { CHECK($$ = name_declarator($1)); }
+ | '(' declarator ')' { $$ = $2; }
+ | declarator2 '[' ']' { CHECK($$ = array_declarator($1, Py_None)); }
| declarator2 '[' constant_expr ']' { CHECK($$ = array_declarator($1, $3)); }
- | '(' ')' { CHECK($$ = function_declarator(empty_declarator(), empty_list())); }
- | '(' parameter_list ')' { CHECK($$ = function_declarator(empty_declarator(), $2)); }
- | declarator2 '(' ')' { CHECK($$ = function_declarator($1, empty_list())); }
- | declarator2 '(' parameter_list ')' { CHECK($$ = function_declarator($1, $3)); }
+ | declarator2 '(' ')' { CHECK($$ = function_declarator($1, empty_list())); }
+ | declarator2 '(' parameter_list ')' { CHECK($$ = function_declarator($1, $3)); }
;
pointer
- : '*' { CHECK($$ = pointer($1, Py_None, Py_None)); }
- | '*' declaration_specifiers { CHECK($$ = pointer($1, $2, Py_None)); }
- | '*' pointer { CHECK($$ = pointer($1, Py_None, $2)); }
- | '*' declaration_specifiers pointer { CHECK($$ = pointer($1, $2, $3)); }
+ : '*' { CHECK($$ = pointer($1, Py_None, Py_None)); }
+ | '*' type_specifier_list { CHECK($$ = pointer($1, $2, Py_None)); }
+ | '*' pointer { CHECK($$ = pointer($1, Py_None, $2)); }
+ | '*' type_specifier_list pointer { CHECK($$ = pointer($1, $2, $3)); }
;
+type_specifier_list
+ : type_specifier { CHECK($$ = type_specifier_list(Py_None, $1)); }
+ | type_specifier_list type_specifier { CHECK($$ = type_specifier_list($1, $2)); }
+ ;
+
parameter_list
: parameter_declaration { CHECK($$ = parameter_list(Py_None, $1)); }
| parameter_list ',' parameter_declaration { CHECK($$ = parameter_list($1, $3)); }
@@ -296,16 +301,35 @@
;
parameter_declaration
- : declaration_specifiers declarator { CHECK($$ = pair($1, $2)); }
- | declaration_specifiers { CHECK($$ = pair($1, empty_declarator())); }
- | declarator { CHECK($$ = pair(Py_None, $1)); }
+ : type_specifier_list declarator { CHECK($$ = pair($1, $2)); }
+ | type_specifier_list abstract_declarator { CHECK($$ = pair($1, $2)); }
+ | type_specifier_list { CHECK($$ = pair($1, empty_declarator())); }
+ | declarator { CHECK($$ = pair(Py_None, $1)); }
;
type_name
- : declaration_specifiers { CHECK($$ = pair($1, empty_declarator())); }
- | declaration_specifiers declarator { CHECK($$ = pair($1, $2)); }
+ : type_specifier_list { CHECK($$ = pair($1, empty_declarator())); }
+ | type_specifier_list abstract_declarator { CHECK($$ = pair($1, $2)); }
;
+abstract_declarator
+ : pointer { CHECK($$ = pointer_declarator($1, empty_declarator())); }
+ | abstract_declarator2
+ | pointer abstract_declarator2 { CHECK($$ = pointer_declarator($1, $2)); }
+ ;
+
+abstract_declarator2
+ : '(' abstract_declarator ')' { CHECK($$ = $2); }
+ | '[' ']' { CHECK($$ = array_declarator(empty_declarator(), Py_None)); }
+ | '[' constant_expr ']' { CHECK($$ = array_declarator(empty_declarator(), $2)); }
+ | abstract_declarator2 '[' ']' { CHECK($$ = array_declarator($1, Py_None)); }
+ | abstract_declarator2 '[' constant_expr ']' { CHECK($$ = array_declarator($1, $3)); }
+ | '(' ')' { CHECK($$ = function_declarator(empty_declarator(), empty_list())); }
+ | '(' parameter_list ')' { CHECK($$ = function_declarator(empty_declarator(), $2)); }
+ | abstract_declarator2 '(' ')' { CHECK($$ = function_declarator($1, empty_list())); }
+ | abstract_declarator2 '(' parameter_list ')' { CHECK($$ = function_declarator($1, $3)); }
+ ;
+
initializer
: assignment_expr
| '{' initializer_list '}'
@@ -363,7 +387,6 @@
: labeled_statement
| compound_statement
| expression_statement
- | declaration
| selection_statement
| iteration_statement
| jump_statement
@@ -376,13 +399,20 @@
;
compound_statement
- : '{' '}' { CHECK($$ = statement_list($1, Py_None, Py_None)); }
- | '{' statement_list '}' { CHECK($$ = $2); }
+ : '{' '}' { CHECK($$ = compound_statement($1, Py_None, Py_None)); }
+ | '{' statement_list '}' { CHECK($$ = compound_statement($1, Py_None, $2)); }
+ | '{' declaration_list '}' { CHECK($$ = compound_statement($1, $2, Py_None)); }
+ | '{' declaration_list statement_list '}' { CHECK($$ = compound_statement($1, $2, $3)); }
;
+declaration_list
+ : declaration { CHECK($$ = declaration_list(Py_None, $1)); }
+ | declaration_list declaration { CHECK($$ = declaration_list($1, $2)); }
+ ;
+
statement_list
- : statement { CHECK($$ = statement_list(Py_None, Py_None, $1)); }
- | statement_list statement { CHECK($$ = statement_list(Py_None, $1, $2)); }
+ : statement { CHECK($$ = statement_list(Py_None, $1)); }
+ | statement_list statement { CHECK($$ = statement_list($1, $2)); }
;
expression_statement
@@ -398,9 +428,16 @@
;
iteration_statement
- : WHILE '(' expr ')' statement { CHECK($$ = while_statement($1, $3, $5)); }
+ : WHILE '(' expr ')' statement { CHECK($$ = while_statement($1, $3, $5)); }
| DO statement WHILE '(' expr ')' ';'
- | FOR '(' statement_list expr ')' statement { CHECK($$ = pass_statement($1)); }
+ | FOR '(' ';' ';' ')' statement
+ | FOR '(' ';' ';' expr ')' statement
+ | FOR '(' ';' expr ';' ')' statement
+ | FOR '(' ';' expr ';' expr ')' statement
+ | FOR '(' expr ';' ';' ')' statement
+ | FOR '(' expr ';' ';' expr ')' statement
+ | FOR '(' expr ';' expr ';' ')' statement
+ | FOR '(' expr ';' expr ';' expr ')' statement
;
jump_statement
@@ -428,14 +465,9 @@
function_body
: compound_statement
- | function_prologue compound_statement { CHECK($$ = $2); /*TODO*/ }
+ | declaration_list compound_statement
;
-function_prologue
- : declaration
- | function_prologue declaration
- ;
-
identifier
: IDENTIFIER { CHECK($$ = $1); }
;
More information about the cig-commits
mailing list