Analise :: Eyapp.Analise :: Eyapp Módulo contém extensões para Analise :: Yapp. | |
Baixe Agora |
Analise :: Eyapp. Classificação e resumo
Propaganda
- Licença:
- Perl Artistic License
- Preço:
- FREE
- Nome do editor:
- Casiano Rodriguez-Leon
- Site do editor:
- http://search.cpan.org/~casiano/Parse-Eyapp-1.110/lib/Parse/Eyapp.pod
Analise :: Eyapp. Tag
Analise :: Eyapp. Descrição
Analisar :: módulo Eyapp contém extensões para Parse :: Yapp. módulo de análise :: Eyapp contém extensões para análise :: Yapp.SYNOPSIS usar rigorosa; usar Parse :: Eyapp; uso Parse :: Eyapp :: Treeregexp; sub TERMINAL :: informação {$ _ {attr}} my $ gramática = q {% certo '=' # menor precedência% esquerda '-' '+' # + e - têm mais prioridade do que = disambiguate abc como ( ab) -c% esquerda '*' '/' # * e / têm precedência mais do que + desambiguar a / b / c como (a / b) / c% esquerda NEG # desambiguar -aB como (-a) e -b não como - (ab)% tree # Vamos construir uma árvore de sintaxe abstrata ... %% linha: exp {$ _ } / * lista de expressões separadas por ';' * /; / * A directiva% name define o nome da classe à qual o nó que está sendo construído pertence * / exp: nome% NUM NUM | % VAR nome VAR | name% ASSIGN VAR '=' exp | nome PLUS exp% '+' exp | % Exp nome menos '-' exp | TIMES nome% exp '*' exp | name% DIV exp '/' exp | name% UMINUS '-' exp% prec NEG | '(' Exp ')' {$ _ } / * Vamos simplificar um pouco a árvore * /; %% sub _error {die "Erro de sintaxe próximo" ($ _ -> YYCurval $ _ -> YYCurval: "fim de arquivo").. "N"} sub _Lexer {my ($ parser) = shift; # O objeto analisador for ($ parser-> YYData -> {ENTRADA}) {# Topicalize m {Gs +} gc; $ _ Eq '' e retorno ( '', undef); m {G ( + (:?.? +))} gc e retorno ( 'NUM', $ 1); m {G ( *)} GC e de retorno ( 'VAR', $ 1); m {L (.)} gcs e retorno ($ 1, $ 1); }} Sub Run {my ($ self) = shift; $ Auto-> yyparse (yylex => _Lexer, yyerror => _error,); }}; # Fim gramática nosso (@all, $ UMINUS); Parse :: Eyapp-> new_grammar (# Criar a entrada pacote analisador / class => $ gramática, classname => 'Calc', # O nome do pacote que contém o firstline parser => 7 # string $ gramática começa na linha 7 ( para diagnóstico de erro)); my $ parser = Calc-> new (); # Criar um analisador $ parser-> YYData -> {ENTRADA} = "2 * -3 + b * 0, - 2n"; # Set a entrada my $ t = $ parser-> Executar; # Analisá-lo! locais $ Parse :: Eyapp :: Node :: TRAVESSÃO = 2; imprimir "Syntax Tree:", $ t-> str; # Vamos transformar a árvore. Definir as expressões de árvores regular .. my $ p = Parse :: Eyapp :: Treeregexp-> new (String => q {{# Exemplo de código de suporte my% Op = (PLUS => '+', MENOS => ' -', TIMES => '*', DIV => '/');} constantfold: / TIMES | plus | DIV | MINUS /: bin (NUM ($ x), NUM ($ y)) => {my $ op = $ op {ref ($ bin)}; $ x -> {attr} = eval "$ x -> {attr} $ op $ y -> {attr}"; $ _ = $ NUM ;} UMINUS: UMINUS (NUM ($ x)) => {$ x -> {attr} = - $ x -> {attr}; $ _ = $ num} zero_times_whatever: Times (NUM ($ x .),) e {$ x -> {attr} == 0} => {$ _ = $ NUM} whatever_times_zero:. TIMES (, NUM ($ x)) e {$ x -> {attr} == 0} => {$ _ = $ NUM}}, outputfile => 'main.pm'); $ P> generate (); # Criar as Transformações $ t-> s ($ UMINUS); # Transform UMINUS nós $ t-> s (@all); # Constante dobragem e mult. por zero locais $ Parse :: Eyapp :: Node :: TRAVESSÃO = 0; imprimir "nSyntax Árvore após transformações: n", $ t-> str, "n"; Requisitos: · Requisitos Perl: · Perl.
Analise :: Eyapp. Software Relacionado
StrfTime para JavaScript
StrFTTime for JavaScript é uma biblioteca que traz a flexibilidade do StrFTime para o objeto de data do JavaScript. ...
174
Transação :: Simples
Transaction :: Simples é uma biblioteca Ruby que fornece suporte transacional ativo ("ao vivo", não-backend) aos objetos de marechal. ...
143