[asterisk-commits] murf: branch murf/fast-ast r41226 - /team/murf/fast-ast/main/ast_var.y

asterisk-commits at lists.digium.com asterisk-commits at lists.digium.com
Sat Aug 26 22:14:54 MST 2006


Author: murf
Date: Sun Aug 27 00:14:54 2006
New Revision: 41226

URL: http://svn.digium.com/view/asterisk?rev=41226&view=rev
Log:
Another little hop forward. Embedding the var syntax and the expr syntax into
a larger, string concat sort of syntax.


Modified:
    team/murf/fast-ast/main/ast_var.y

Modified: team/murf/fast-ast/main/ast_var.y
URL: http://svn.digium.com/view/asterisk/team/murf/fast-ast/main/ast_var.y?rev=41226&r1=41225&r2=41226&view=diff
==============================================================================
--- team/murf/fast-ast/main/ast_var.y (original)
+++ team/murf/fast-ast/main/ast_var.y Sun Aug 27 00:14:54 2006
@@ -91,38 +91,92 @@
 	 
 
 
+%left <part> TOK_COND TOK_COLONCOLON
+%left <part> TOK_OR
+%left <part> TOK_AND
+%left <part> TOK_EQ TOK_GT TOK_LT TOK_GE TOK_LE TOK_NE
+%left <part> TOK_PLUS TOK_MINUS
+%left <part> TOK_MULT TOK_DIV TOK_MOD
+%right <part> TOK_COMPL
+%left <part> TOK_COLON TOK_EQTILDE
+%left <part> TOK_RP TOK_LP
 
-%left <part> DOLL LCURLY RCURLY LPAR RPAR COLON COMMA
-%left <part> Name Num
+%left <part> TOK_DOLL TOK_LCURLY TOK_RCURLY  TOK_COMMA TOK_LBRACK TOK_RBRACK
+%left <part> Name Num Stringconst
 
-%type <part> varref thing substr args arg 
+%type <part> varref thing substr args arg expression expr
 
 %%
 
-varref : DOLL LCURLY  thing RCURLY {}
+string : stringpartlist {}
+
+stringpartlist : stringpart {}
+               | stringpartlist stringpart {}
+			   | stringpartlist TOK_PLUS stringpart {}
+               ;
+
+stringpart : varref {}
+           | expression {}
+           | Stringconst {}
+           ;
+
+
+varref : TOK_DOLL TOK_LCURLY  thing TOK_RCURLY {}
        ;
 
+expression : TOK_DOLL TOK_LBRACK expr TOK_RBRACK {}
+           ;
 
-thing : varref substr {$$=new_part(PART_VARNAME);$$->u1.ref=$1;}
-      | arg substr {$$=new_part(PART_VARNAME);$$->u1.ref=$1;$$->}
-      | arg LPAR args RPAR substr {$$=new_part(PART_FUNC);$$->u1.ref=$1; $$->u2.arglist=$3;}
-      | arg LPAR RPAR substr {$$=new_part(PART_FUNC);$$->u1.ref=$1; $$->u2.arglist=0; }
+
+thing : arg {$$=new_part(PART_VARNAME);$$->u1.ref=$1;}
+      | arg substr {$$=new_part(PART_VARNAME);$$->u1.ref=$1;$$->u2.substr = $2;}
+      | arg TOK_LP args TOK_RP  {$$=new_part(PART_FUNC);$$->u1.ref=$1; $$->u2.arglist=$3;}
+      | arg TOK_LP args TOK_RP substr {$$=new_part(PART_FUNC);$$->u1.ref=$1; $$->u2.arglist=$3; $$->u3.substr=$4;}
+      | arg TOK_LP TOK_RP {$$=new_part(PART_FUNC);$$->u1.ref=$1; $$->u2.arglist=0; }
+      | arg TOK_LP TOK_RP substr {$$=new_part(PART_FUNC);$$->u1.ref=$1; $$->u2.arglist=0; $$->u3.substr=$4;}
       ;
 
-substr : /* nothing */ { $$ = 0; }
-       | COLON Num {$$ = new_part(PART_SUBSTR); $$->u1.offset = $2; $$->u2.length = MAX_INT;}
-       | COLON Num COLON Num {$$ = new_part(PART_SUBSTR); $$->u1.offset = $2; $$->u2.length = $4;}
+substr : TOK_COLON Num {$$ = new_part(PART_SUBSTR); $$->u1.offset = $2; $$->u2.length = MAX_INT;}
+       | TOK_COLON Num TOK_COLON Num {$$ = new_part(PART_SUBSTR); $$->u1.offset = $2; $$->u2.length = $4;}
        ;
 
 args : arg {$$=$1;}
-     | args COMMA arg { $$=$1; $$->next = $3;}
+     | args TOK_COMMA arg { $$=$1; $$->next = $3;}
 	 ;
 
 arg : Name {$$=new_part(PART_STR); $$->u1.string=$1;}
     | Num {char numbuf[40]; $$=new_part(PART_STR); sprintf(numbuf,"%d",$1); $$->u1.string=strdup(numbuf);}
 	| varref {$$=$1;}
+    | expression { $$ = $1;  }
     ;
 
+
+expr:	Stringconst  { $$= $1;}
+    | Num {  }
+    | Name {  }
+    | varref {  }
+    | expression {  }
+
+	| TOK_LP expr TOK_RP {  }
+	| expr TOK_OR expr { }
+	| expr TOK_AND expr { }
+	| expr TOK_EQ expr { }
+	| expr TOK_GT expr { }
+	| expr TOK_LT expr { }
+	| expr TOK_GE expr  { }
+	| expr TOK_LE expr  { }
+	| expr TOK_NE expr  { }
+	| expr TOK_PLUS expr { }
+	| expr TOK_MINUS expr { }
+	| TOK_MINUS expr %prec TOK_COMPL { }
+	| TOK_COMPL expr   { }
+	| expr TOK_MULT expr { }
+	| expr TOK_DIV expr { }
+	| expr TOK_MOD expr { }
+	| expr TOK_COLON expr { }
+	| expr TOK_EQTILDE expr { }
+	| expr TOK_COND expr TOK_COLONCOLON expr  { }
+	;
 
 
 %%



More information about the asterisk-commits mailing list