Module Murder_generator.Ast
type attribute_kind
=
|
Attribute
|
Contact
type cconstraint
=
Constraints over players (in a let-be declaration).
type destination
=
A type to express destinations. The most important constructor is the first one: this type can be thought as just a fancy type for string at first read.
type 'player target_destination
=
|
FromTo of 'player * 'player
From the first player to the second player.
|
Between of 'player list
Between players, in a symmetrical way.
Describes a direction of a relation or a contact. The type for player is parameterised to enable the use of the special
destination
type instead.
type translation
= Translation.language * Translation.command list * string Translation.sitem list
Describes a translation in a given language and required or given grammatical cases.
type description
= Translation.language * string
A description in a language.
type add
= Translation.language * Translation.tag
States that having this constructors set as attribute or contact changes the grammatical cases of the player by implicitely providing the following new tag at each translation.
type let_player
= string option * cconstraint list
Declare a player with some constraints. If the player is
None
, then these constraints apply to any other player than the ones declared in the element.
type let_object
= string * string * cconstraint list
Declare an object of a given kind and name with some constraints.
type provide_relation
= string target_destination * Relation.t
Provide a relation between two players.
type provide_attribute
=
{
attribute_strictness : State.strictness;
How compatible this statement is with other
provide
commands.attribute_name : string;
The name of the provided attribute.
attribute_player : destination;
The player to which this attribute should be attached.
attribute_value : string list;
The possible constructors provided by this element to the specified player. Each constructor in this list are valid possibilities.
}
Provide an attribute value to a player.
type provide_contact
=
{
contact_strictness : State.strictness;
How compatible this statement is with other
provide
commands.contact_name : string;
The name of the provided contact.
contact_destination : destination target_destination;
Defines which players get to be related.
contact_value : string list;
The possible constructors provided by this element to the specified player. Each constructor in this list are valid possibilities.
}
Provide a contact value to a player.
type event_kind
=
|
Kind of string
User-declared kind.
|
KindAttribute of string
An event providing this attribute.
|
KindContact of string * string list
An event providing this contact to these players.
type event_constraint
=
{
constraint_kind : event_kind;
The constraint is about this event kind.
constraint_players : string list;
The constraint only applies for these players
constraint_after : bool;
If
true
, the constraint is about events following this event, iffalse
about prior events.constraint_any : bool;
If
true
, there should be at least one event of this kind in the considered period. Iffalse
, there should be none.}
Declare some constraints over events.
type command
=
|
OfCategory of string
The given category is required to consider this block.
|
Translation of translation
|
Description of description
|
Sentence of block
A sentence with multiple translations for an event. Only accepts
Translation
commands.|
Add of add
|
CompatibleWith of string
States that if the current constructor is required in a
provide compatible
command, but the given constructor is present instead, then one can still apply this element.|
LetPlayer of let_player
|
LetObject of let_object
|
ProvideRelation of provide_relation
|
ProvideAttribute of provide_attribute
|
ProvideContact of provide_contact
|
AddDifficulty of bool * string list
This element is more difficult than it looks like for these players. If the boolean is
false
, it is actually less difficult.|
AddComplexity of bool * string list
This element is more complex than it looks like for these players. If the boolean is
false
, it is actually less complex.|
EventKind of string
The event is of this particular kind.
|
ProvideEvent of provide_event
|
EventConstraint of event_constraint
The possible commands present in a block.
and provide_event
= bool * bool * Events.event_type * string list * block
Provide an event of this kind to these players.
Provides an event of the following type to a list of player. The first boolean states whether the event is blocking, the second wether it is a phantom event. Accepts the following commands:
Translation
,EventKind
, andEventConstraint
.
and block
= command list
A block that provides commands to a declaration. Note that not all blocks can accept any kinds of commands: a post-parsing treatment is needed. See the Driver module (and its
convert_block
function in particular) for more details.
type declaration
=
|
DeclareInstance of attribute_kind * string * bool * block
Declare a attribute of this name. The boolean states whether the attribute is internal. Only expects commands of the form
OfCategory
in its block.|
DeclareConstructor of attribute_kind * string * string * bool * block
Declare a attribute’s constructor for this attribute and of this name. The boolean states whether the constructor is internal. Accepts the following commands:
OfCategory
,Translation
,Add
, andCompatibleWith
.|
DeclareObject of string * block
Declare an object kind. Only expects commands of the form
OfCategory
andTranslation
.|
DeclareCategory of string * block
Declare a category of this name. Only expects commands of the form
OfCategory
andTranslation
.|
DeclareElement of History.status * string * block
Declare an element of this status and name. Accepts the following commands:
LetPlayer
,OfCategory
,ProvideRelation
,ProvideAttribute
,ProvideContact
, andProvideEvent
.|
DeclareCase of Translation.language * Translation.tag
Declare a grammatical case for a language.
|
DeclareEventKind of string * block
Declare an event kind of this name. Accepts the following commands:
OfCategory
andEventKind
.