Context-free grammar

From The Battle for Wesnoth Wiki
Revision as of 11:42, 12 April 2016 by Dugi (talk | contribs) (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...")
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)

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

main=Hello world|Hi world|Ahoi world

The result is either Hello world or Hi world or Ahoi world.


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.