X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=x2p%2Fa2p.y;h=2d3f23923e540227af7485b500ef67b6ef61b28a;hb=1b979e0af6d73985fab5b12b2e2d182e270d6642;hp=afe513ca2470dfc8434ba0f02709adfd767c7497;hpb=a687059cbaf2c6fdccb5e0fae2aee80ec15625a8;p=p5sagit%2Fp5-mst-13.2.git diff --git a/x2p/a2p.y b/x2p/a2p.y index afe513c..2d3f239 100644 --- a/x2p/a2p.y +++ b/x2p/a2p.y @@ -1,15 +1,12 @@ %{ -/* $Header: a2p.y,v 3.0 89/10/18 15:34:29 lwall Locked $ +/* $RCSfile: a2p.y,v $$Revision: 4.1 $$Date: 92/08/07 18:29:12 $ * - * Copyright (c) 1989, Larry Wall + * Copyright (c) 1991-1997, Larry Wall * - * You may distribute under the terms of the GNU General Public License - * as specified in the README file that comes with the perl 3.0 kit. + * You may distribute under the terms of either the GNU General Public + * License or the Artistic License, as specified in the README file. * * $Log: a2p.y,v $ - * Revision 3.0 89/10/18 15:34:29 lwall - * 3.0 baseline - * */ #include "INTERN.h" @@ -87,32 +84,18 @@ arg_list: expr_list { $$ = rememberargs($$); } ; -patpat : pat +patpat : cond { $$ = oper1(OPAT,$1); } - | pat ',' pat + | cond ',' cond { $$ = oper2(ORANGE,$1,$3); } ; -pat : match - | rel - | compound_pat - ; - -compound_pat - : '(' compound_pat ')' - { $$ = oper1(OPPAREN,$2); } - | pat ANDAND maybe pat - { $$ = oper3(OPANDAND,$1,$3,$4); } - | pat OROR maybe pat - { $$ = oper3(OPOROR,$1,$3,$4); } - | NOT pat - { $$ = oper1(OPNOT,$2); } - ; - cond : expr | match | rel | compound_cond + | cond '?' expr ':' expr + { $$ = oper3(OCOND,$1,$3,$5); } ; compound_cond @@ -150,7 +133,9 @@ expr : term { $$ = $1; } | expr term { $$ = oper2(OCONCAT,$1,$2); } - | variable ASGNOP expr + | expr '?' expr ':' expr + { $$ = oper3(OCOND,$1,$3,$5); } + | variable ASGNOP cond { $$ = oper3(OASSIGN,$2,$1,$3); if ((ops[$1].ival & 255) == OFLD) lval_field = TRUE; @@ -179,8 +164,6 @@ term : variable { $$ = oper2(OPOW,$1,$3); } | term IN VAR { $$ = oper2(ODEFINED,aryrefarg($3),$1); } - | term '?' term ':' term - { $$ = oper2(OCOND,$1,$3,$5); } | variable INCR { $$ = oper1(OPOSTINCR,$1); } | variable DECR @@ -193,22 +176,22 @@ term : variable { $$ = oper1(OUMINUS,$2); } | '+' term %prec UMINUS { $$ = oper1(OUPLUS,$2); } - | '(' expr ')' + | '(' cond ')' { $$ = oper1(OPAREN,$2); } | GETLINE { $$ = oper0(OGETLINE); } - | GETLINE VAR + | GETLINE variable { $$ = oper1(OGETLINE,$2); } | GETLINE '<' expr { $$ = oper3(OGETLINE,Nullop,string("<",1),$3); if (ops[$3].ival != OSTR + (1<<8)) do_fancy_opens = TRUE; } - | GETLINE VAR '<' expr + | GETLINE variable '<' expr { $$ = oper3(OGETLINE,$2,string("<",1),$4); if (ops[$4].ival != OSTR + (1<<8)) do_fancy_opens = TRUE; } | term 'p' GETLINE { $$ = oper3(OGETLINE,Nullop,string("|",1),$1); if (ops[$1].ival != OSTR + (1<<8)) do_fancy_opens = TRUE; } - | term 'p' GETLINE VAR + | term 'p' GETLINE variable { $$ = oper3(OGETLINE,$4,string("|",1),$1); if (ops[$1].ival != OSTR + (1<<8)) do_fancy_opens = TRUE; } | FUN1 @@ -229,6 +212,8 @@ term : variable { $$ = oper2(OSUBSTR,$3,$5); } | SPLIT '(' expr ',' VAR ',' expr ')' { $$ = oper3(OSPLIT,$3,aryrefarg(numary($5)),$7); } + | SPLIT '(' expr ',' VAR ',' REGEX ')' + { $$ = oper3(OSPLIT,$3,aryrefarg(numary($5)),oper1(OREGEX,$7));} | SPLIT '(' expr ',' VAR ')' { $$ = oper2(OSPLIT,$3,aryrefarg(numary($5))); } | INDEX '(' expr ',' expr ')' @@ -376,12 +361,12 @@ simple { $$ = oper0(ORETURN); } | RET expr { $$ = oper1(ORETURN,$2); } - | DELETE VAR '[' expr ']' + | DELETE VAR '[' expr_list ']' { $$ = oper2(ODELETE,aryrefarg($2),$4); } ; redir : '>' %prec FIELD - { $$ = oper1(OREDIR,$1); } + { $$ = oper1(OREDIR,string(">",1)); } | GRGR { $$ = oper1(OREDIR,string(">>",2)); } | '|' @@ -408,4 +393,7 @@ compound ; %% + +int yyparse _((void)); + #include "a2py.c"