diff options
author | Larry Wall <larry@wall.org> | 1988-06-05 00:00:00 +0000 |
---|---|---|
committer | Larry Wall <larry@wall.org> | 1988-06-05 00:00:00 +0000 |
commit | 378cc40b38293ffc7298c6a7ed3cd740ad79be52 (patch) | |
tree | 87bedf9adc5c88847a2e2d85963df5f94435aaf5 /x2p/a2p.y | |
parent | a4de7c03d0bdc29d9d3a18abad4ac2628182ed7b (diff) | |
download | perl-378cc40b38293ffc7298c6a7ed3cd740ad79be52.tar.gz |
perl 2.0 (no announcement message available)perl-2.0
Some of the enhancements from Perl1 included:
* New regexp routines derived from Henry Spencer's.
o Support for /(foo|bar)/.
o Support for /(foo)*/ and /(foo)+/.
o \s for whitespace, \S for non-, \d for digit, \D nondigit
* Local variables in blocks, subroutines and evals.
* Recursive subroutine calls are now supported.
* Array values may now be interpolated into lists: unlink 'foo', 'bar', @trashcan, 'tmp';
* File globbing.
* Use of <> in array contexts returns the whole file or glob list.
* New iterator for normal arrays, foreach, that allows both read and write.
* Ability to open pipe to a forked off script for secure pipes in setuid scripts.
* File inclusion via do 'foo.pl';
* More file tests, including -t to see if, for instance, stdin is a terminal. File tests now behave in a more correct manner. You can do file tests on filehandles as well as filenames. The special filetests -T and -B test a file to see if it's text or binary.
* An eof can now be used on each file of the <> input for such purposes as resetting the line numbers or appending to each file of an inplace edit.
* Assignments can now function as lvalues, so you can say things like ($HOST = $host) =~ tr/a-z/A-Z/; ($obj = $src) =~ s/\.c$/.o/;
* You can now do certain file operations with a variable which holds the name of a filehandle, e.g. open(++$incl,$includefilename); $foo = <$incl>;
* Warnings are now available (with -w) on use of uninitialized variables and on identifiers that are mentioned only once, and on reference to various undefined things.
* There is now a wait operator.
* There is now a sort operator.
* The manual is now not lying when it says that perl is generally faster than sed. I hope.
Diffstat (limited to 'x2p/a2p.y')
-rw-r--r-- | x2p/a2p.y | 83 |
1 files changed, 47 insertions, 36 deletions
@@ -1,9 +1,9 @@ %{ -/* $Header: a2p.y,v 1.0 87/12/18 13:07:05 root Exp $ +/* $Header: a2p.y,v 2.0 88/06/05 00:15:38 root Exp $ * * $Log: a2p.y,v $ - * Revision 1.0 87/12/18 13:07:05 root - * Initial revision + * Revision 2.0 88/06/05 00:15:38 root + * Baseline version 2.0. * */ @@ -42,14 +42,14 @@ program : junk begin hunks end { root = oper4(OPROG,$1,$2,$3,$4); } ; -begin : BEGIN '{' states '}' junk - { $$ = oper2(OJUNK,$3,$5); in_begin = FALSE; } +begin : BEGIN '{' maybe states '}' junk + { $$ = oper3(OJUNK,$3,$4,$6); in_begin = FALSE; } | /* NULL */ { $$ = Nullop; } ; -end : END '{' states '}' - { $$ = $3; } +end : END '{' maybe states '}' + { $$ = oper2(OJUNK,$3,$4); } | end NEWLINE { $$ = $1; } | /* NULL */ @@ -64,10 +64,10 @@ hunks : hunks hunk junk hunk : patpat { $$ = oper1(OHUNK,$1); need_entire = TRUE; } - | patpat '{' states '}' - { $$ = oper2(OHUNK,$1,$3); } - | '{' states '}' - { $$ = oper2(OHUNK,Nullop,$2); } + | patpat '{' maybe states '}' + { $$ = oper2(OHUNK,$1,oper2(OJUNK,$3,$4)); } + | '{' maybe states '}' + { $$ = oper2(OHUNK,Nullop,oper2(OJUNK,$2,$3)); } ; patpat : pat @@ -118,7 +118,7 @@ rel : expr RELOP expr ; match : expr MATCHOP REGEX - { $$ = oper3(OMATCHOP,$2,$1,$3); } + { $$ = oper3(OMATCHOP,$2,$1,oper1(OREGEX,$3)); } | '(' match ')' { $$ = oper1(OMPAREN,$2); } ; @@ -198,14 +198,6 @@ variable: NUMBER { $$ = oper1(OVFLD,$2); } ; -maybe : NEWLINE - { $$ = oper0(ONEWLINE); } - | /* NULL */ - { $$ = Nullop; } - | COMMENT - { $$ = oper1(OCOMMENT,$1); } - ; - print_list : expr | clist @@ -237,15 +229,27 @@ hunksep : ';' { $$ = oper1(OCOMMENT,$1); } ; -separator - : ';' - { $$ = oper0(OSEMICOLON); } - | SEMINEW - { $$ = oper0(OSNEWLINE); } - | NEWLINE - { $$ = oper0(OSNEWLINE); } +maybe : maybe nlstuff + { $$ = oper2(OJUNK,$1,$2); } + | /* NULL */ + { $$ = Nullop; } + ; + +nlstuff : NEWLINE + { $$ = oper0(ONEWLINE); } | COMMENT - { $$ = oper1(OSCOMMENT,$1); } + { $$ = oper1(OCOMMENT,$1); } + ; + +separator + : ';' maybe + { $$ = oper2(OJUNK,oper0(OSEMICOLON),$2); } + | SEMINEW maybe + { $$ = oper2(OJUNK,oper0(OSNEWLINE),$2); } + | NEWLINE maybe + { $$ = oper2(OJUNK,oper0(OSNEWLINE),$2); } + | COMMENT maybe + { $$ = oper2(OJUNK,oper1(OSCOMMENT,$1),$2); } ; states : states statement @@ -255,11 +259,20 @@ states : states statement ; statement - : simple separator - { $$ = oper2(OSTATE,$1,$2); } + : simple separator maybe + { $$ = oper2(OJUNK,oper2(OSTATE,$1,$2),$3); } + | ';' maybe + { $$ = oper2(OSTATE,Nullop,oper2(OJUNK,oper0(OSEMICOLON),$2)); } + | SEMINEW maybe + { $$ = oper2(OSTATE,Nullop,oper2(OJUNK,oper0(OSNEWLINE),$2)); } | compound ; +simpnull: simple + | /* NULL */ + { $$ = Nullop; } + ; + simple : expr | PRINT print_list redir expr @@ -292,8 +305,6 @@ simple { $$ = oper1(OEXIT,$2); } | CONTINUE { $$ = oper0(OCONTINUE); } - | /* NULL */ - { $$ = Nullop; } ; redir : RELOP @@ -311,14 +322,14 @@ compound { $$ = oper3(OIF,$3,bl($6,$5),bl($9,$8)); } | WHILE '(' cond ')' maybe statement { $$ = oper2(OWHILE,$3,bl($6,$5)); } - | FOR '(' simple ';' cond ';' simple ')' maybe statement + | FOR '(' simpnull ';' cond ';' simpnull ')' maybe statement { $$ = oper4(OFOR,$3,$5,$7,bl($10,$9)); } - | FOR '(' simple ';' ';' simple ')' maybe statement + | FOR '(' simpnull ';' ';' simpnull ')' maybe statement { $$ = oper4(OFOR,$3,string("",0),$6,bl($9,$8)); } | FOR '(' VAR IN VAR ')' maybe statement { $$ = oper3(OFORIN,$3,$5,bl($8,$7)); } - | '{' states '}' - { $$ = oper1(OBLOCK,$2); } + | '{' maybe states '}' maybe + { $$ = oper3(OBLOCK,oper2(OJUNK,$2,$3),Nullop,$5); } ; %% |