This is the State Transition Table (STT) for Graph::Easy's graph description language.
This table has been exported from an OpenOffice Calc spreadsheet as a CSV file, with the latter being incorporated into this HTML.
The lexer which reads the spreadsheet, or the CSV version, does not use the last 2 columns, Regexp and Interpretation.
The Regexp column is referred to in the spreadsheet by formulas, and the Interpretation column is just for the reader.
Clearly, this table does not quite cover all of the syntax supported by Graph::Easy.
Graph::Easy::Marpa::Lexer reads this STT, and outputs tokens in an intermediary language.
The lexer uses Set::FA::Element to actually process the graph definition.
Graph::Easy::Marpa::Parser reads those tokens and builds a data structure in memory representing the graph.
Start |
Accept |
State |
Event |
Next |
Entry |
Exit |
Regexp |
Interpretation |
Yes |
. |
global |
[a-z][a-z0-9_]* |
class |
. |
save_class_name |
[a-z][a-z0-9_]* |
Attribute name |
. |
. |
. |
{ |
start_class_attribute |
. |
. |
[a-z][a-z0-9_]* |
Class name |
. |
. |
. |
\( |
start_group |
. |
. |
[-<=>~.]+ |
Edge name |
. |
. |
. |
\[ |
start_node |
. |
. |
[a-zA-Z_][a-zA-Z_0-9]* |
Event name |
. |
. |
. |
[-<=>~.]+ |
edge |
. |
. |
[a-zA-Z_][a-zA-Z_0-9]* |
Node name |
. |
. |
. |
\s+ |
global |
. |
. |
[a-zA-Z_][a-zA-Z_0-9]* |
State name |
. |
. |
. |
. |
. |
. |
. |
[a-z][a-z0-9_]* |
Subclass name |
. |
. |
class |
, |
class_daisy_chain |
. |
validate_class_name |
. |
. |
. |
. |
. |
\. |
start_subclass |
. |
. |
. |
. |
. |
. |
. |
{ |
start_class_attribute |
. |
. |
. |
. |
. |
. |
. |
\( |
start_group |
. |
. |
. |
. |
. |
. |
. |
\[ |
start_node |
. |
. |
. |
. |
. |
. |
. |
[-<=>~.]+ |
edge |
. |
. |
. |
. |
. |
. |
. |
\s+ |
class |
. |
. |
. |
. |
. |
. |
. |
. |
. |
. |
. |
. |
. |
. |
. |
start_class_attribute |
[\w :;]+ |
class_attribute |
. |
. |
. |
. |
. |
. |
. |
. |
. |
. |
. |
. |
. |
. |
. |
. |
. |
. |
. |
. |
. |
. |
. |
. |
class_daisy_chain |
[a-z][a-z0-9_]* |
class |
. |
. |
. |
. |
. |
. |
. |
\. |
subclass |
. |
. |
. |
. |
. |
. |
. |
\s+ |
class_daisy_chain |
. |
. |
. |
. |
. |
. |
. |
. |
. |
. |
. |
. |
. |
. |
. |
start_subclass |
[a-z][a-z0-9_]* |
subclass |
. |
save_class_name |
. |
. |
. |
. |
. |
. |
. |
. |
. |
. |
. |
. |
. |
. |
. |
. |
. |
. |
. |
. |
. |
. |
subclass |
, |
class_daisy_chain |
. |
validate_subclass_name |
. |
. |
. |
. |
. |
{ |
start_class_attribute |
. |
. |
. |
. |
. |
. |
. |
\( |
start_group |
. |
. |
. |
. |
. |
. |
. |
\[ |
node |
. |
. |
. |
. |
. |
. |
. |
[-<=>~.]+ |
edge |
. |
. |
. |
. |
. |
. |
. |
\s+ |
subclass |
. |
. |
. |
. |
. |
. |
. |
. |
. |
. |
. |
. |
. |
. |
. |
class_attribute |
[\w :;]+ |
class_attribute |
save_class_attribute |
validate_class_attribute |
. |
. |
. |
. |
. |
} |
post_class_attribute |
. |
. |
. |
. |
. |
. |
. |
. |
. |
. |
. |
. |
. |
. |
. |
. |
. |
. |
. |
. |
. |
. |
. |
. |
post_class_attribute |
[a-z][a-z0-9_]* |
class |
. |
save_class_name |
. |
. |
. |
. |
. |
\( |
start_group |
. |
. |
. |
. |
. |
. |
. |
\[ |
start_node |
. |
. |
. |
. |
. |
. |
. |
[-<=>~.]+ |
edge |
. |
. |
. |
. |
. |
. |
. |
, |
daisy_chain |
. |
. |
. |
. |
. |
. |
. |
\s+ |
post_class_attribute |
. |
. |
. |
. |
. |
. |
. |
. |
. |
. |
. |
. |
. |
. |
. |
start_group |
[\w.:]+ |
group |
push_group |
save_group_name |
. |
. |
. |
. |
. |
[-<=>~.]+ |
edge |
. |
. |
. |
. |
. |
. |
. |
\) |
post_group |
. |
. |
. |
. |
. |
. |
. |
\s+ |
start_group |
. |
. |
. |
. |
. |
. |
. |
. |
. |
. |
. |
. |
. |
. |
. |
group |
[a-z][a-z0-9_]* |
class |
. |
validate_group_name |
. |
. |
. |
. |
. |
\[ |
start_node |
. |
. |
. |
. |
. |
. |
. |
[-<=>~.]+ |
edge |
. |
. |
. |
. |
. |
. |
. |
\s+ |
group |
. |
. |
. |
. |
. |
. |
. |
. |
. |
. |
. |
. |
. |
. |
Yes |
post_group |
\[ |
start_node |
pop_group |
. |
. |
. |
. |
. |
. |
\( |
start_group |
. |
. |
. |
. |
. |
. |
. |
[-<=>~.]+ |
edge |
. |
. |
. |
. |
. |
. |
. |
\s+ |
post_group |
. |
. |
. |
. |
. |
. |
. |
. |
. |
. |
. |
. |
. |
. |
. |
start_node |
[\w.]+ |
node |
. |
save_node_name |
. |
. |
. |
. |
. |
] |
post_node |
. |
. |
. |
. |
. |
. |
. |
\s+ |
start_node |
. |
. |
. |
. |
. |
. |
. |
. |
. |
. |
. |
. |
. |
. |
. |
node |
] |
post_node |
. |
. |
. |
. |
. |
. |
. |
\s+ |
node |
. |
. |
. |
. |
. |
. |
. |
. |
. |
. |
. |
. |
. |
. |
Yes |
post_node |
{ |
start_attribute |
validate_node_name |
. |
. |
. |
. |
. |
. |
\( |
start_group |
. |
. |
. |
. |
. |
. |
. |
\) |
post_group |
. |
. |
. |
. |
. |
. |
. |
\[ |
start_node |
. |
. |
. |
. |
. |
. |
. |
[-<=>~.]+ |
edge |
. |
. |
. |
. |
. |
. |
. |
, |
daisy_chain |
. |
. |
. |
. |
. |
. |
. |
\s+ |
post_node |
. |
. |
. |
. |
. |
. |
. |
. |
. |
. |
. |
. |
. |
. |
. |
start_attribute |
[\w :;]+ |
attribute |
. |
. |
. |
. |
. |
. |
. |
. |
. |
. |
. |
. |
. |
. |
. |
. |
. |
. |
. |
. |
. |
. |
. |
. |
attribute |
[\w :;]+ |
attribute |
save_attribute |
. |
. |
. |
. |
. |
. |
} |
post_attribute |
. |
validate_attribute |
. |
. |
. |
. |
. |
. |
. |
. |
. |
. |
. |
. |
. |
. |
. |
. |
. |
. |
. |
. |
. |
Yes |
post_attribute |
\[ |
start_node |
. |
. |
. |
. |
. |
. |
. |
\) |
post_group |
. |
. |
. |
. |
. |
. |
. |
[-<=>~.]+ |
edge |
. |
. |
. |
. |
. |
. |
. |
, |
daisy_chain |
. |
. |
. |
. |
. |
. |
. |
\s+ |
post_attribute |
. |
. |
. |
. |
. |
. |
. |
. |
. |
. |
. |
. |
. |
. |
Yes |
edge |
{ |
start_attribute |
save_edge_name |
validate_edge_name |
. |
. |
. |
. |
. |
\( |
start_group |
. |
. |
. |
. |
. |
. |
. |
\) |
post_group |
. |
. |
. |
. |
. |
. |
. |
\[ |
start_node |
. |
. |
. |
. |
. |
. |
. |
, |
daisy_chain |
. |
. |
. |
. |
. |
. |
. |
\s+ |
edge |
. |
. |
. |
. |
. |
. |
. |
. |
. |
. |
. |
. |
. |
. |
. |
daisy_chain |
\[ |
start_node |
. |
. |
. |
. |
. |
. |
. |
[-<=>~.]+ |
edge |
. |
. |
. |
. |
. |
. |
. |
\s+ |
daisy_chain |
. |
. |
. |
. |
Start |
Accept |
State |
Event |
Next |
Entry |
Exit |
Regexp |
Interpretation |