[svn-commits] murf: branch murf/fast-ast r41226 -
/team/murf/fast-ast/main/ast_var.y
svn-commits at lists.digium.com
svn-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 svn-commits
mailing list