=head1 NAME Parse::Eyapp::TokenGen - Support for Using Parse::Eyapp as a Data Generator =head1 INTRODUCTION For a introduction to data generation using L see L. =head1 METHODS =head2 set_tokengens Receives the parser object and the pairs token => generator Sets the generator attribute of the tokens. Though not strictly necessary, the generator is a L object. =head2 set_weights Receives the parser object and the pairs token => weight Sets the weight attribute of the tokens. The weight is a floating number. =head2 set_tokenweightsandgenerators Receives the parser object and the pairs token => [weight, generator] or token => weight and sets the weight and generator attributes of the tokens. An example can be found in C: $parser->set_tokenweightsandgenerators( NUM => [ 2, Int(range=>[0, 9], sized=>0)], VAR => [ 0, # At the beginning, no variables are defined Gen { return Elements(keys %st)->generate if keys %st; return Int(range=>[0, 9], sized=>0)->generate; }, ], VARDEF => [ 2, String( length=>[1,2], charset=>"A-NP-Z", size => 100 ) ], '=' => 2, '-' => 1, '+' => 2, '*' => 4, '/' => 2, '^' => 0.5, ';' => 1, '(' => 1, ')' => 2, '' => 2, 'error' => 0, ); =head2 token_weight Receives the parser object and the token and returns the weight. If an additional weight is provided the weight for the token is set. =head2 token_generator Receives the parser object and the token and returns the generator. If an additional generator is provided the generator for the token is set. =head2 deltaweight Has the syntax: $parser->deltaweight(TOKEN1 => deltaweight1, TOKEN2 => deltaweight2, ...) increases the weight of the respective token by the associated amount. =head2 pushdeltaweight As C but the current weights of the involved tokens are saved in a stack =head2 popweight Restores the weights of the tokens that were previously saved with C =head1 SEE ALSO =over =item * L =item * L by Tom Moertel =item * The Design and Implementation of a Grammar-based Data Generator (1992) by Peter M. Maurer, Software Practice and Experience L =item * yagg: an easy-to-use generator for structured test inputs by David Coppit and Jiexin Lian. ASE '05: Proceedings of the 20th IEEE/ACM international Conference on Automated software engineering. 2005, pages 356-359. =over 2 =item * L, =item * L, =item * L =back =item * Writing Randomly by Randall Schwartz. Linux Magazine Column 04 (Sep 1999). L =item * Generating Test Data with Enhanced Context Free Grammars by Peter M. Maurer L =item * Modules as Programs by Brian d Foy L =item * How a Script Becomes a Module by Brian d Foy. On Perlmonks: L. =back =head1 CONTRIBUTORS =over 2 =item * Hal Finkel L =item * G. Williams L =item * Thomas L. Shinnick L =item * Frank Leray =back =head1 AUTHOR William N. Braswell, Jr. (Remove "NOSPAM".) =head1 ACKNOWLEDGMENTS This work has been supported by CEE (FEDER) and the Spanish Ministry of I through I number TIN2005-08818-C04-04 (ULL::OPLINK project L). Support from Gobierno de Canarias was through GC02210601 (I). The University of La Laguna has also supported my work in many ways and for many years. A large percentage of code is verbatim taken from L 1.05. The author of L is Francois Desarmenien. I wish to thank Francois Desarmenien for his L module, to my students at La Laguna and to the Perl Community. Thanks to the people who have contributed to improve the module (see L). Thanks to Larry Wall for giving us Perl. Special thanks to Juana. =head1 LICENSE AND COPYRIGHT Copyright © 2006, 2007, 2008, 2009, 2010, 2011, 2012 Casiano Rodriguez-Leon. Copyright © 2017 William N. Braswell, Jr. All Rights Reserved. Parse::Yapp is Copyright © 1998, 1999, 2000, 2001, Francois Desarmenien. Parse::Yapp is Copyright © 2017 William N. Braswell, Jr. All Rights Reserved. These modules are free software; you can redistribute it and/or modify it under the same terms as Perl itself. See L. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.