[Avida-SVN] r1186 - development/source/script

brysonda at myxo.css.msu.edu brysonda at myxo.css.msu.edu
Fri Jan 12 11:41:24 PST 2007


Author: brysonda
Date: 2007-01-12 14:41:24 -0500 (Fri, 12 Jan 2007)
New Revision: 1186

Modified:
   development/source/script/AvidaScript.h
   development/source/script/cLexer.l
   development/source/script/cParser.cc
Log:
Adjust grammar spec to be LL(k) compatible.

Modified: development/source/script/AvidaScript.h
===================================================================
--- development/source/script/AvidaScript.h	2007-01-12 16:12:19 UTC (rev 1185)
+++ development/source/script/AvidaScript.h	2007-01-12 19:41:24 UTC (rev 1186)
@@ -13,6 +13,7 @@
 enum eASTokens {
   SUPRESS = 1,
   ENDL,
+  COMMA,
   
   OP_BIT_NOT,
   OP_BIT_AND,

Modified: development/source/script/cLexer.l
===================================================================
--- development/source/script/cLexer.l	2007-01-12 16:12:19 UTC (rev 1185)
+++ development/source/script/cLexer.l	2007-01-12 19:41:24 UTC (rev 1186)
@@ -28,6 +28,7 @@
 
 ;           return SUPRESS;       // End-of-line
 \n          return ENDL;
+,           return COMMA;
 
 ~           return OP_BIT_NOT;    // Bitwise Operators
 &           return OP_BIT_AND;

Modified: development/source/script/cParser.cc
===================================================================
--- development/source/script/cParser.cc	2007-01-12 16:12:19 UTC (rev 1185)
+++ development/source/script/cParser.cc	2007-01-12 19:41:24 UTC (rev 1186)
@@ -14,68 +14,112 @@
 /*
  script: statement_list
  
- statement_list:	statement |	statement_list statement |
- statement: expression ENDL
+ statement_list: statement statement_list
+               |
+ 
+ statement: expr ENDL
           | var_declare ENDL
-          | flow_command
+          | if_block
+          | while_block
+          | foreach_block
           | declare_function
           | define_function
           | ENDL
   
  type_any: TYPE_BOOL | TYPE_CHAR | TYPE_FLOAT | TYPE_INT | TYPE_VOID
  
- expression: OP_BIT_NOT expression
-           | expression OP_BIT_AND expression
-           | expression OP_BIT_OR expression
+ expr: p0_expr expr_1
 
-           | OP_LOGIC_NOT expression
-           | expression OP_LOGIC_AND expression
-           | expression OP_LOGIC_OR expression
+ expr_1: ASSIGN p0_expr expr_1
+      |
+ 
+ 
+ p0_expr: p1_expr p0_expr_1
+ 
+ p0_expr_1: OP_LOGIC_AND p1_expr p0_expr_1
+          | OP_LOGIC_OR p1_expr p0_expr_1
+          |
 
-           | expression OP_ADD expression
-           | expression OP_SUB expression
-           | expression OP_MUL expression
-           | expression OP_DIV expression
-           | expression OP_MOD expression
+ p1_expr: p2_expr p1_expr_1
  
-           | ID ASSIGN expression
+ p1_expr_1: OP_BIT_AND p2_expr p1_expr_1
+          | OP_BIT_OR p2_expr p1_expr_1
+          |
 
-           | expression OP_EQ expression
-           | expression OP_LE expression
-           | expression OP_GE expression
-           | expression OP_LT expression
-           | expression OP_GT expression
-           | expression OP_NEQ expression
-
-           | OP_SUB expression
  
-           | PREC_OPEN expression PREC_CLOSE
+ p2_expr: p3_expr p2_expr_1
+ 
+ p2_expr_1: OP_EQ p3_expr p2_expr_1
+          | OP_LE p3_expr p2_expr_1
+          | OP_GE p3_expr p2_expr_1
+          | OP_LT p3_expr p2_expr_1
+          | OP_GT p3_expr p2_expr_1
+          | OP_NEQ p3_expr p2_expr_1
+          |
+ 
+ 
+ p3_expr: p4_expr p3_expr_1
+ 
+ p3_expr_1: OP_ADD p4_expr p3_expr_1
+          | OP_SUB p4_expr p3_expr_1
+          |
 
-           | FLOAT
-           | INT
-           | STRING
-           | CHAR
  
-           | ID
-           | ID IDX_OPEN expression IDX_CLOSE
-           | ID PREC_OPEN argument_list PREC_CLOSE
-           | expression DOT ID PREC_OPEN argument_list PREC_CLOSE
-  
- argument_list: argument_list2 | 
- argument_list2: argument_list2 ',' expression |	expression 
+ p4_expr: p5_expr prec_4_expr_1
+ 
+ p4_expr_1: OP_MUL p5_expr p4_expr_1
+          | OP_DIV p5_expr p4_expr_1
+          | OP_MOD p5_expr p4_expr_1
+          |
+ 
+ 
+ p5_expr: value p5_expr_1
+        | OP_BIT_NOT expr
+        | OP_LOGIC_NOT expr
+        | OP_SUB expr
+ 
+ p5_expr_1: DOT ID id_expr
+          |
+ 
+ 
+ value: FLOAT
+      | INT
+      | STRING
+      | CHAR
+      | ID id_expr
+      | PREC_OPEN expr PREC_CLOSE
+ 
+ id_expr: IDX_OPEN expr IDX_CLOSE
+        | PREC_OPEN argument_list PREC_CLOSE
+        |
+ 
+ argument_list: argument_list_1
+              |
+ 
+ argument_list_1: expr argument_list_2
+ 
+ argument_list_2: COMMA expr argument_list_2
+                |
 
- if_block: CMD_IF PREC_OPEN expression PREC_CLOSE ENDL statement_list CMD_ENDIF ENDL
-         | CMD_IF PREC_OPEN expression PREC_CLOSE ENDL statement_list CMD_ELSE statement_list CMD_ENDIF ENDL
+ if_block: CMD_IF PREC_OPEN expr PREC_CLOSE ENDL statement_list CMD_ENDIF ENDL
+         | CMD_IF PREC_OPEN expr PREC_CLOSE ENDL statement_list CMD_ELSE statement_list CMD_ENDIF ENDL
  
- while_block: CMD_WHILE PREC_OPEN expression PREC_CLOSE ENDL statement_list CMD_ENDWHILE ENDL
+ while_block: CMD_WHILE PREC_OPEN expr PREC_CLOSE ENDL statement_list CMD_ENDWHILE ENDL
  
- foreach_block: CMD_FOREACH REF ID PREC_OPEN expression PREC_CLOSE ENDL statement_list CMD_ENDFOREACH ENDL
-              | CMD_FOREACH type_any ID PREC_OPEN expression PREC_CLOSE ENDL statement_list CMD_ENDFOREACH ENDL
+ foreach_block: CMD_FOREACH REF ID PREC_OPEN expr PREC_CLOSE ENDL statement_list CMD_ENDFOREACH ENDL
+              | CMD_FOREACH type_any ID PREC_OPEN expr PREC_CLOSE ENDL statement_list CMD_ENDFOREACH ENDL
 
- var_declare: type_any ID | type_any ID ASSIGN expression
- var_declare_list: var_declare_list2 |  
- var_declare_list2: var_declare_list2 ',' var_declare | var_declare
+ var_declare: type_any ID
+            | type_any ID ASSIGN expr
  
+ var_declare_list: var_declare_list_1
+                 |
+ 
+ var_declare_list_1: var_declare var_declare_list_2
+ 
+ var_declare_list_2: COMMA var_declare var_declare_list_2
+                   | 
+ 
  declare_function: REF CMD_FUNCTION type_any ID PREC_OPEN var_declare_list PREC_CLOSE ENDL
  define_function: CMD_FUNCTION type_any ID PREC_OPEN var_declare_list PREC_CLOSE ENDL statement_list CMD_ENDFUNCTION
  




More information about the Avida-cvs mailing list