eyapp man page on Darwin

Man page or keyword search:  
man Server   23457 pages
apropos Keyword Search (all sections)
Output format
Darwin logo
[printable version]

EYAPP(1)	      User Contributed Perl Documentation	      EYAPP(1)

NAME
       eyapp - A Perl front-end to the Parse::Eyapp module

SYNOPSYS
	   eyapp [options] grammar[.eyp]
	   eyapp -V
	   eyapp -h

	       grammar	   The grammar file. If no suffix is given, and the file
			   does not exists, .eyp is added

DESCRIPTION
       The eyapp compiler is a front-end to the Parse::Eyapp module, which
       lets you compile Parse::Eyapp grammar input files into Perl LALR(1)
       Object Oriented parser modules.

OPTIONS IN DETAIL
       -v  Creates a file grammar.output describing your parser. It will show
	   you a summary of conflicts, rules, the DFA (Deterministic Finite
	   Automaton) states and overall usage of the parser.

	   Implies option "-N". To produce a more detailed description of the
	   states, the LALR tables aren't compacted.  Use the combination
	   "-vN" to produce an	".output" file corresponding to the compacted
	   tables.

       -s  Create a standalone module in which the parsing driver is included.
	   The modules including the LALR driver (Parse::Eyapp::Driver), those
	   for AST manipulations (Parse::Eyapp::Node and Parse::Eyapp::YATW))
	   and Parse::Eyapp::Base are included - almost verbatim - inside the
	   generated module.

	   Note that if you have more than one parser module called from a
	   program, to have it standalone, you need this option only for one
	   of your grammars;

       -n  Disable source file line numbering embedded in your parser module.
	   I don't know why one should need it, but it's there.

       -m module
	   Gives your parser module the package name (or name space or module
	   name or class name or whatever-you-call-it) of module.  It defaults
	   to grammar

       -o outfile
	   The compiled output file will be named outfile for your parser
	   module.  It defaults to grammar.pm or, if you specified the option
	   -m A::Module::Name (see below), to Name.pm.

       -c grammar[.eyp]
	   Produces as output (STDOUT) the grammar without the actions. Only
	   the syntactic parts are displayed. Comments will be also stripped
	   if the "-v" option is added.

       -t filename
	   The -t filename option allows you to specify a file which should be
	   used as template for generating the parser output.  The default is
	   to use the internal template defined in Parse::Eyapp::Output.pm.
	   For how to write your own template and which substitutions are
	   available, have a look to the module Parse::Eyapp::Output.pm : it
	   should be obvious.

       -b shebang
	   If you work on systems that understand so called shebangs, and your
	   generated parser is directly an executable script, you can specify
	   one with the -b option, ie:

	       eyapp -b '/usr/local/bin/perl -w' -o myscript.pl myscript.yp

	   This will output a file called myscript.pl whose very first line
	   is:

	       #!/usr/local/bin/perl -w

	   The argument is mandatory, but if you specify an empty string, the
	   value of $Config{perlpath} will be used instead.

       -B prompt
	   Adds a modulino call '__PACKAGE->main(<prompt>) unless caller();'
	   as the very last line of the output file. The argument is
	   mandatory.

       -C grammar.eyp
	   An abbreviation for the combined use of -b '' and  -B ''

       -T grammar.eyp
	   Equivalent to %tree.

       -N grammar.eyp
	   Equivalent to the directive %nocompact. Do not compact LALR action
	   tables.

       -l  Do not provide a default lexical analyzer. By default "eyapp"
	   builds a lexical analyzer from your "%token = /regexp/" definitions

       grammar
	   The input grammar file. If no suffix is given, and the file does
	   not exists, an attempt to open the file with a suffix of  .eyp is
	   tried before exiting.

       -V  Display current version of Parse::Eyapp and gracefully exits.

       -h  Display the usage screen.

EXAMPLE
       The following "eyapp" program translates an infix expression like
       "2+3*4" to postfix: "2 3 4 * +"

	   %token NUM = /([0-9]+(?:\.[0-9]+)?)/
	   %token VAR = /([A-Za-z][A-Za-z0-9_]*)/

	   %right  '='
	   %left   '-' '+'
	   %left   '*' '/'
	   %left   NEG

	   %defaultaction { "$left $right $op"; }

	   %%
	   line: $exp  { print "$exp\n" }
	   ;

	   exp:	       $NUM  { $NUM }
		   |   $VAR  { $VAR }
		   |   VAR.left '='.op exp.right
		   |   exp.left '+'.op exp.right
		   |   exp.left '-'.op exp.right
		   |   exp.left '*'.op exp.right
		   |   exp.left '/'.op exp.right
		   |   '-' $exp %prec NEG { "$exp NEG" }
		   |   '(' $exp ')' { $exp }
	   ;

	   %%

       Notice that there is no need to write lexer and error report
       subroutines.  First, we compile the grammar:

	   pl@nereida:~/LEyapp/examples/eyappintro$ eyapp -o postfix.pl -C Postfix.eyp

       If we use the "-C" option and no "main()" was written one default
       "main" sub is provided.	We can now execute the resulting program:

	   pl@nereida:~/LEyapp/examples/eyappintro$ ./postfix.pl -c 'a = 2*3 +b'
	   a 2 3 * b + =

       When a non conformant input is given, it produces an accurate error
       message:

	   pl@nereida:~/LEyapp/examples/eyappintro$ ./postfix.pl -c 'a = 2**3 +b'

	   Syntax error near '*'.
	   Expected one of these terminals: '-' 'NUM' 'VAR' '('
	   There were 1 errors during parsing

AUTHOR
       Casiano Rodriguez-Leon

COPYRIGHT
       (c) Copyright 2006 Casiano Rodriguez-Leon

       This library is free software; you can redistribute it and/or modify it
       under the same terms as Perl itself, either Perl version 5.8.8 or, at
       your option, any later version of Perl 5 you may have available.

SEE ALSO
       ·   Parse::Eyapp,

       ·   perldoc vgg,

       ·   The tutorial Parsing Strings and Trees with "Parse::Eyapp" (An
	   Introduction to Compiler Construction in seven pages)> in

       ·   The pdf file in
	   <http://nereida.deioc.ull.es/~pl/perlexamples/Eyapp.pdf>

       ·   <http://nereida.deioc.ull.es/~pl/perlexamples/section_eyappts.html>
	   (Spanish),

       ·   eyapp,

       ·   treereg,

       ·   Parse::yapp,

       ·   yacc(1),

       ·   bison(1),

       ·   the classic book "Compilers: Principles, Techniques, and Tools" by
	   Alfred V. Aho, Ravi Sethi and

       ·   Jeffrey D. Ullman (Addison-Wesley 1986)

       ·   Parse::RecDescent.

perl v5.16.2			  2010-12-08			      EYAPP(1)
[top]

List of man pages available for Darwin

Copyright (c) for man pages and the logo by the respective OS vendor.

For those who want to learn more, the polarhome community provides shell access and support.

[legal] [privacy] [GNU] [policy] [cookies] [netiquette] [sponsors] [FAQ]
Tweet
Polarhome, production since 1999.
Member of Polarhome portal.
Based on Fawad Halim's script.
....................................................................
Vote for polarhome
Free Shell Accounts :: the biggest list on the net