Spec-Zone .ru
спецификации, руководства, описания, API
Spec-Zone .ru
спецификации, руководства, описания, API
Библиотека разработчика Mac Разработчик
Поиск

 

Эта страница руководства для  версии 10.9 Mac OS X

Если Вы выполняете различную версию  Mac OS X, просматриваете документацию локально:

Читать страницы руководства

Страницы руководства предназначаются как справочник для людей, уже понимающих технологию.

  • Чтобы изучить, как руководство организовано или узнать о синтаксисе команды, прочитайте страницу руководства для страниц справочника (5).

  • Для получения дополнительной информации об этой технологии, ищите другую документацию в Библиотеке Разработчика Apple.

  • Для получения общей информации о записи сценариев оболочки, считайте Shell, Пишущий сценарий Учебника для начинающих.



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)

Сообщение о проблемах

Способ сообщить о проблеме с этой страницей руководства зависит от типа проблемы:

Ошибки содержания
Ошибки отчета в содержании этой документации к проекту Perl. (См. perlbug (1) для инструкций представления.)
Отчеты об ошибках
Сообщите об ошибках в функциональности описанного инструмента или API к Apple через Генератор отчетов Ошибки и к проекту Perl, использующему perlbug (1).
Форматирование проблем
Отчет, форматирующий ошибки в интерактивной версии этих страниц со ссылками на отзыв ниже.