Difference between revisions of "Context-free grammar"
 (Created page with "Context-free grammar can be used to generate random strings, from short words to entire paragraphs. If you are interested in its theory, read more on [https://en.wikipedia.org...")  | 
				 (→Examples:  Format to take advantage of syntax highlighting)  | 
				||
| Line 7: | Line 7: | ||
== Examples ==  | == Examples ==  | ||
| − | <  | + | <syntaxhighlight lang=wml>  | 
| + | name_generator= _ <<  | ||
| + |     main=Hello world|Hi world|Ahoi world  | ||
| + | >>  | ||
| + | </syntaxhighlight>  | ||
The result is either ''Hello world'' or ''Hi world'' or ''Ahoi world''.  | The result is either ''Hello world'' or ''Hi world'' or ''Ahoi world''.  | ||
| − | + | <syntaxhighlight lang=wml>  | |
| − | + | name_generator= _ <<  | |
| − | + |     main=Hello {noun}|Hi {noun}  | |
| − | + |     noun=world|planet|Universe|Earth  | |
| − | + | >>  | |
| + | </syntaxhighlight>  | ||
The result is either ''Hello'' or ''Hi'', followed by one of the four possible nouns, ''world'', ''planet'', ''Universe'' or ''Earth''.  | The result is either ''Hello'' or ''Hi'', followed by one of the four possible nouns, ''world'', ''planet'', ''Universe'' or ''Earth''.  | ||
Revision as of 21:34, 12 April 2016
Context-free grammar can be used to generate random strings, from short words to entire paragraphs. If you are interested in its theory, read more on [1].
Syntax
In WML, it uses its own simple syntax. It is usually a translatable string and should be in <<French quotation marks>>. The code is composed from nonterminals. They are written on separate lines. Each nonterminal is substituted by one of its possibilities separated by the | symbol, the name is separated from possibilities with =. The nonterminal that makes the result is named main. The possibilities can contain other nonterminals, marked by {curly brackets}.
Examples
name_generator= _ <<
    main=Hello world|Hi world|Ahoi world
>>
The result is either Hello world or Hi world or Ahoi world.
name_generator= _ <<
    main=Hello {noun}|Hi {noun}
    noun=world|planet|Universe|Earth
>>
The result is either Hello or Hi, followed by one of the four possible nouns, world, planet, Universe or Earth.
Other rules
A nonterminal can reference itself, which can, under the right circumstances, lead to a loop that expands indefinitely, causing a stack overflow. Avoid this unless you really know what you are doing.
Each nonterminal has a reduced probability for possibilities that were chosen the last time.