/* bison parser specification of VCG version "1.00.0 19930401 (release)"     */
/* grammar.pgs,v 3.13 1994/08/08 16:01:47 sander Exp $"; */

%token LEXWORD_ABOVE LEXWORD_ANCHORPOINTS LEXWORD_ANCHOR LEXWORD_AQUAMARINE %token LEXWORD_AROUND LEXWORD_ARROWCOLOR LEXWORD_ARROWHEIGHT %token LEXWORD_ARROWSTYLE LEXWORD_ARROWWIDTH LEXWORD_ARROWSIZE %token LEXWORD_BARYCENTER LEXWORD_BARY LEXWORD_BEHIND LEXWORD_BELOW %token LEXWORD_BLACK LEXWORD_BLUE LEXWORD_BORDERCOLOR LEXWORD_BORDERWIDTH %token LEXWORD_BOTTOM_MARGIN LEXWORD_BOTTOM_TO_TOP LEXWORD_BOTTOM %token LEXWORD_BOX LEXWORD_CENTER LEXWORD_CLASSNAME LEXWORD_CLASS %token LEXWORD_CLUSTER LEXWORD_COLOR LEXWORD_CONSTRAINTS LEXWORD_CONSTRAINT %token LEXWORD_CONTINUOUS LEXWORD_CROSSING_WEIGHT LEXWORD_CROSSING_OPT %token LEXWORD_CYAN LEXWORD_DARKBLUE LEXWORD_DARKCYAN LEXWORD_DARKGREEN %token LEXWORD_DARKGREY LEXWORD_DARKMAGENTA LEXWORD_DARKRED %token LEXWORD_DARKYELLOW LEXWORD_DASHED LEXWORD_DIMENSION %token LEXWORD_DIRTY_EDGE_LABELS LEXWORD_DISPLAY_EDGE_LABELS LEXWORD_DOTTED %token LEXWORD_EDGE1 LEXWORD_EDGE2 LEXWORD_ELLIPSE LEXWORD_EQUAL_COLUMN %token LEXWORD_EQUAL_POSITION LEXWORD_EQUAL_ROW LEXWORD_EQUAL LEXWORD_EVERY %token LEXWORD_FINETUNING LEXWORD_FOLDEDGE LEXWORD_FOLDNODE LEXWORD_FOLDING %token LEXWORD_FONTNAME LEXWORD_GOLD LEXWORD_GRAPH LEXWORD_GREATER %token LEXWORD_GREEN LEXWORD_GREY LEXWORD_HEIGHT LEXWORD_HIGH_MARGIN %token LEXWORD_HIGH LEXWORD_HIDDEN LEXWORD_HORDER LEXWORD_ICONFILE %token LEXWORD_ICONHEIGHT LEXWORD_ICONSTYLE LEXWORD_ICONWIDTH %token LEXWORD_INCLUDE LEXWORD_INFONAME LEXWORD_INFO1 LEXWORD_INFO2 %token LEXWORD_INFO3 LEXWORD_INPUTFUNCTION LEXWORD_INTERVAL %token LEXWORD_INVISIBLE LEXWORD_IN_FONT LEXWORD_ISI LEXWORD_KHAKI %token LEXWORD_LABEL LEXWORD_LATE_LABELS LEXWORD_LAYOUTALGORITHM %token LEXWORD_LAYOUTFREQUENCY LEXWORD_LAYOUTPARAMETER %token LEXWORD_LAYOUTDOWNFACTOR LEXWORD_LAYOUTUPFACTOR %token LEXWORD_LAYOUTNEARFACTOR LEXWORD_LAYOUTSPLINEFACTOR %token LEXWORD_LEFT_JUSTIFY LEXWORD_LEFT_MARGIN LEXWORD_LEFT_NEIGHBOR %token LEXWORD_LEFT_TO_RIGHT LEXWORD_LEFT LEXWORD_LEVEL LEXWORD_VORDER %token LEXWORD_LIGHTBLUE LEXWORD_LIGHTCYAN LEXWORD_LIGHTGREEN %token LEXWORD_LIGHTGREY LEXWORD_LIGHTMAGENTA LEXWORD_LIGHTRED %token LEXWORD_LIGHTYELLOW LEXWORD_LILAC LEXWORD_LIMIT LEXWORD_LINE %token LEXWORD_LINESTYLE LEXWORD_LOC LEXWORD_LOWER_NEIGHBOR %token LEXWORD_LOW_MARGIN LEXWORD_LOW LEXWORD_MAGENTA LEXWORD_MANUAL %token LEXWORD_MAXDEPTHSLOW LEXWORD_MAXDEPTH LEXWORD_MAXDEGREE %token LEXWORD_MAXINDEGREE LEXWORD_MAXOUTDEGREE LEXWORD_MEDIAN %token LEXWORD_MINDEPTHSLOW LEXWORD_MINDEPTH LEXWORD_MINDEGREE %token LEXWORD_MININDEGREE LEXWORD_MINOUTDEGREE LEXWORD_MINBACK %token LEXWORD_NAME LEXWORD_NEAREDGE LEXWORD_NEIGHBORS LEXWORD_NEAREDGES %token LEXWORD_NONEAREDGES LEXWORD_NODE1 LEXWORD_NODE2 LEXWORD_NODES %token LEXWORD_NODE_ALIGN LEXWORD_NONE LEXWORD_NO LEXWORD_ORANGE %token LEXWORD_ORCHID LEXWORD_ORIENTATION LEXWORD_OUTPUTFUNCTION %token LEXWORD_PINK LEXWORD_PLANAR LEXWORD_PRIORITY LEXWORD_PURPLE %token LEXWORD_RANGE LEXWORD_RED LEXWORD_RHOMB LEXWORD_RIGHT_JUSTIFY %token LEXWORD_RIGHT_MARGIN LEXWORD_RIGHT_NEIGHBOR LEXWORD_RIGHT_TO_LEFT %token LEXWORD_RIGHT LEXWORD_SCALING LEXWORD_SHAPE LEXWORD_SHRINK %token LEXWORD_SIZE LEXWORD_SMALLER LEXWORD_SOLID LEXWORD_SOURCENAME %token LEXWORD_SPLINES LEXWORD_SPLINEFACTOR LEXWORD_SPREADLEVEL %token LEXWORD_STATUS LEXWORD_STRETCH LEXWORD_TARGETNAME LEXWORD_TEXTCOLOR %token LEXWORD_TEXTMODE LEXWORD_THICKNESS LEXWORD_TITLE LEXWORD_TOPSORT %token LEXWORD_TOP_MARGIN LEXWORD_TOP_TO_BOTTOM LEXWORD_TOP LEXWORD_TREE %token LEXWORD_TREEFACTOR LEXWORD_TRIANGLE LEXWORD_TURQUOISE %token LEXWORD_TYPENAME LEXWORD_UPPER_NEIGHBOR LEXWORD_WHITE LEXWORD_WIDTH %token LEXWORD_XBASE LEXWORD_XMAX LEXWORD_XRASTER LEXWORD_XLRASTER %token LEXWORD_XSCROLLBAR LEXWORD_XSPACE LEXWORD_XLSPACE LEXWORD_YBASE %token LEXWORD_YELLOWGREEN LEXWORD_YELLOW LEXWORD_YES LEXWORD_YMAX %token LEXWORD_YRASTER LEXWORD_YSCROLLBAR LEXWORD_YSPACE LEX_INT LEX_FLOAT %token LEX_CHAR LEX_STRING graph:
LEXWORD_GRAPH '{' graph_entry_list '}'
;

graph_entry_list:
graph_entry_list graph_entry
| graph_entry
;

graph_entry:
graph_attribute
| node_defaults
| edge_defaults
| foldnode_defaults
| foldedge_defaults
| graph
| node
| edge
| nearedge
| constraint
;

graph_attribute:
'x' ':' int_const
| 'y' ':' int_const
| LEXWORD_LOC '{' 'x' ':' int_const 'y' ':' int_const '}'
| LEXWORD_WIDTH ':' int_const
| LEXWORD_HEIGHT ':' int_const
| LEXWORD_XMAX ':' int_const
| LEXWORD_YMAX ':' int_const
| LEXWORD_XSCROLLBAR ':' int_const
| LEXWORD_YSCROLLBAR ':' int_const
| LEXWORD_XBASE ':' int_const
| LEXWORD_YBASE ':' int_const
| LEXWORD_XSPACE ':' int_const
| LEXWORD_XLSPACE ':' int_const
| LEXWORD_YSPACE ':' int_const
| LEXWORD_XRASTER ':' int_const
| LEXWORD_XLRASTER ':' int_const
| LEXWORD_YRASTER ':' int_const
| LEXWORD_FOLDING ':' int_const
| LEXWORD_INVISIBLE ':' int_const
| LEXWORD_HIDDEN ':' int_const
| LEXWORD_TITLE ':' str_const
| LEXWORD_LABEL ':' str_const
| LEXWORD_CLASSNAME int_const ':' str_const
| LEXWORD_INFONAME int_const ':' str_const
| LEXWORD_INFO1 ':' str_const
| LEXWORD_INFO2 ':' str_const
| LEXWORD_INFO3 ':' str_const
| LEXWORD_TEXTMODE ':' enum_textmode
| LEXWORD_BORDERWIDTH ':' int_const
| LEXWORD_COLOR ':' enum_color
| LEXWORD_TEXTCOLOR ':' enum_color
| LEXWORD_BORDERCOLOR ':' enum_color
| LEXWORD_ORIENTATION ':' enum_orientation
| LEXWORD_NODE_ALIGN ':' enum_node_align
| LEXWORD_INPUTFUNCTION ':' str_const
| LEXWORD_OUTPUTFUNCTION ':' str_const
| LEXWORD_TYPENAME ':' str_const
| LEXWORD_INCLUDE ':' str_const
| LEXWORD_SCALING ':' float_const
| LEXWORD_SHRINK ':' int_const
| LEXWORD_STRETCH ':' int_const
| LEXWORD_LAYOUTPARAMETER ':' array_value
| LEXWORD_TOPSORT ':' enum_topsort
| LEXWORD_LAYOUTALGORITHM ':' enum_layoutalgorithm
| LEXWORD_LAYOUTFREQUENCY ':' enum_layoutfrequency
| LEXWORD_LAYOUTDOWNFACTOR ':' int_const
| LEXWORD_LAYOUTUPFACTOR ':' int_const
| LEXWORD_LAYOUTNEARFACTOR ':' int_const
| LEXWORD_LAYOUTSPLINEFACTOR ':' int_const
| LEXWORD_SPLINEFACTOR ':' int_const
| LEXWORD_STATUS ':' enum_status
| LEXWORD_LATE_LABELS ':' enum_yes_no
| LEXWORD_DISPLAY_EDGE_LABELS ':' enum_yes_no
| LEXWORD_DIRTY_EDGE_LABELS ':' enum_yes_no
| LEXWORD_FINETUNING ':' enum_yes_no
| LEXWORD_SPLINES ':' enum_yes_no
| LEXWORD_NONEAREDGES
| LEXWORD_NEAREDGES ':' LEXWORD_NO
| LEXWORD_NEAREDGES ':' LEXWORD_YES
| LEXWORD_SHAPE ':' enum_shape
| LEXWORD_LEVEL ':' int_const
| LEXWORD_VORDER ':' int_const
| LEXWORD_HORDER ':' int_const
| LEXWORD_CROSSING_OPT ':' enum_yes_no
| LEXWORD_CROSSING_WEIGHT ':' enum_cross_weight
| LEXWORD_SPREADLEVEL ':' int_const
| LEXWORD_TREEFACTOR ':' float_const
;

enum_color:
LEXWORD_AQUAMARINE
| LEXWORD_BLACK
| LEXWORD_BLUE
| LEXWORD_CYAN
| LEXWORD_DARKBLUE
| LEXWORD_DARKCYAN
| LEXWORD_DARKGREEN
| LEXWORD_DARKGREY
| LEXWORD_DARKMAGENTA
| LEXWORD_DARKRED
| LEXWORD_DARKYELLOW
| LEXWORD_GOLD
| LEXWORD_GREEN
| LEXWORD_KHAKI
| LEXWORD_LIGHTBLUE
| LEXWORD_LIGHTCYAN
| LEXWORD_LIGHTGREEN
| LEXWORD_LIGHTGREY
| LEXWORD_LIGHTMAGENTA
| LEXWORD_LIGHTRED
| LEXWORD_LIGHTYELLOW
| LEXWORD_LILAC
| LEXWORD_MAGENTA
| LEXWORD_ORANGE
| LEXWORD_ORCHID
| LEXWORD_PINK
| LEXWORD_PURPLE
| LEXWORD_RED
| LEXWORD_TURQUOISE
| LEXWORD_WHITE
| LEXWORD_YELLOW
| LEXWORD_YELLOWGREEN
;

enum_topsort:
LEXWORD_HIGH
| LEXWORD_LOW
;

enum_orientation:
LEXWORD_TOP_TO_BOTTOM
| LEXWORD_BOTTOM_TO_TOP
| LEXWORD_LEFT_TO_RIGHT
| LEXWORD_RIGHT_TO_LEFT
;

enum_layoutalgorithm:
LEXWORD_BARYCENTER
| LEXWORD_ISI
| LEXWORD_PLANAR
| LEXWORD_CONSTRAINTS
| LEXWORD_TREE
| LEXWORD_MAXDEPTH
| LEXWORD_MINDEPTH
| LEXWORD_MAXDEPTHSLOW
| LEXWORD_MINDEPTHSLOW
| LEXWORD_MAXDEGREE
| LEXWORD_MINDEGREE
| LEXWORD_MAXINDEGREE
| LEXWORD_MININDEGREE
| LEXWORD_MAXOUTDEGREE
| LEXWORD_MINOUTDEGREE
| LEXWORD_MINBACK
;

enum_layoutfrequency:
LEXWORD_EVERY
| LEXWORD_MANUAL
;

enum_status:
LEXWORD_BLACK
| LEXWORD_GREY
| LEXWORD_WHITE
;

enum_yes_no:
LEXWORD_YES
| LEXWORD_NO
;

enum_cross_weight:
LEXWORD_BARY
| LEXWORD_MEDIAN
;

foldnode_defaults:
LEXWORD_FOLDNODE node_attribute
;

foldedge_defaults:
LEXWORD_FOLDEDGE edge_attribute
;

node_defaults:
LEXWORD_NODE1 node_attribute
;

edge_defaults:
LEXWORD_EDGE1 edge_attribute
;

node:
LEXWORD_NODE2 '{' node_attribute_list '}'
;

node_attribute_list:
node_attribute_list node_attribute
| node_attribute
;

edge:
LEXWORD_EDGE2 '{' edge_attribute_list '}'
;

nearedge:
LEXWORD_NEAREDGE '{' edge_attribute_list '}'
;

edge_attribute_list:
edge_attribute_list edge_attribute
| edge_attribute
;

constraint:
LEXWORD_CONSTRAINT '{' constraint_attribute_list '}'
;

constraint_attribute_list:
constraint_attribute_list constraint_attribute
| constraint_attribute
;

node_attribute:
LEXWORD_TITLE ':' str_const
| LEXWORD_LABEL ':' str_const
| LEXWORD_INFO1 ':' str_const
| LEXWORD_INFO2 ':' str_const
| LEXWORD_INFO3 ':' str_const
| LEXWORD_FONTNAME ':' str_const
| LEXWORD_COLOR ':' enum_color
| LEXWORD_TEXTCOLOR ':' enum_color
| LEXWORD_BORDERCOLOR ':' enum_color
| LEXWORD_ICONFILE ':' str_const
| LEXWORD_ANCHORPOINTS ':' str_const
| LEXWORD_TYPENAME ':' str_const
| LEXWORD_WIDTH ':' int_const
| LEXWORD_HEIGHT ':' int_const
| LEXWORD_BORDERWIDTH ':' int_const
| LEXWORD_LOC '{' 'x' ':' int_const 'y' ':' int_const '}'
| LEXWORD_FOLDING ':' int_const
| LEXWORD_SCALING ':' float_const
| LEXWORD_SHRINK ':' int_const
| LEXWORD_STRETCH ':' int_const
| LEXWORD_ICONWIDTH ':' int_const
| LEXWORD_ICONHEIGHT ':' int_const
| LEXWORD_TEXTMODE ':' enum_textmode
| LEXWORD_ICONSTYLE ':' enum_iconstyle
| LEXWORD_SHAPE ':' enum_shape
| LEXWORD_LEVEL ':' int_const
| LEXWORD_VORDER ':' int_const
| LEXWORD_HORDER ':' int_const
;

enum_textmode:
LEXWORD_CENTER
| LEXWORD_LEFT_JUSTIFY
| LEXWORD_RIGHT_JUSTIFY
;

enum_shape:
LEXWORD_BOX
| LEXWORD_RHOMB
| LEXWORD_ELLIPSE
| LEXWORD_TRIANGLE
;

enum_node_align:
LEXWORD_BOTTOM
| LEXWORD_TOP
| LEXWORD_CENTER
;

enum_iconstyle:
LEXWORD_BOTTOM
| LEXWORD_TOP
| LEXWORD_AROUND
;

edge_attribute:
LEXWORD_SOURCENAME ':' str_const
| LEXWORD_TARGETNAME ':' str_const
| LEXWORD_LABEL ':' str_const
| LEXWORD_FONTNAME ':' str_const
| LEXWORD_COLOR ':' enum_color
| LEXWORD_ARROWCOLOR ':' enum_color
| LEXWORD_TYPENAME ':' str_const
| LEXWORD_THICKNESS ':' int_const
| LEXWORD_CLASS ':' int_const
| LEXWORD_PRIORITY ':' int_const
| LEXWORD_ARROWWIDTH ':' int_const
| LEXWORD_ARROWHEIGHT ':' int_const
| LEXWORD_ARROWSIZE ':' int_const
| LEXWORD_LINESTYLE ':' enum_linestyle
| LEXWORD_ARROWSTYLE ':' enum_arrowstyle
| LEXWORD_ANCHOR ':' int_const
| LEXWORD_HORDER ':' int_const
;

enum_linestyle:
LEXWORD_CONTINUOUS
| LEXWORD_SOLID
| LEXWORD_DOTTED
| LEXWORD_DASHED
| LEXWORD_INVISIBLE
;

enum_arrowstyle:
LEXWORD_NONE
| LEXWORD_LINE
| LEXWORD_SOLID
;

constraint_attribute:
LEXWORD_TITLE ':' str_const
| LEXWORD_PRIORITY ':' int_const
| LEXWORD_SIZE ':' int_const
| LEXWORD_NODES ':' '{' string_array '}'
| LEXWORD_INTERVAL ':' array_value
| LEXWORD_NAME ':' enum_name
| LEXWORD_DIMENSION ':' enum_dimension
;

string_array:
string_array str_const
| str_const
;

enum_name:
LEXWORD_EQUAL
| LEXWORD_SMALLER
| LEXWORD_GREATER
| LEXWORD_NEIGHBORS
| LEXWORD_LOW_MARGIN
| LEXWORD_HIGH_MARGIN
| LEXWORD_RANGE
| LEXWORD_CLUSTER
| LEXWORD_LIMIT
| LEXWORD_ABOVE
| LEXWORD_BELOW
| LEXWORD_LEFT
| LEXWORD_RIGHT
| LEXWORD_IN_FONT
| LEXWORD_BEHIND
| LEXWORD_EQUAL_POSITION
| LEXWORD_EQUAL_ROW
| LEXWORD_EQUAL_COLUMN
| LEXWORD_TOP_MARGIN
| LEXWORD_BOTTOM_MARGIN
| LEXWORD_LEFT_MARGIN
| LEXWORD_RIGHT_MARGIN
| LEXWORD_UPPER_NEIGHBOR
| LEXWORD_LOWER_NEIGHBOR
| LEXWORD_LEFT_NEIGHBOR
| LEXWORD_RIGHT_NEIGHBOR
;

enum_dimension:
'x'
| 'y'
| 'z'
;

attribute_value:
LEX_INT
| LEX_FLOAT
| LEX_CHAR
| LEX_STRING
| array_value
;

array_value:
'{' index_value_list '}'
;

index_value_list:
index_value_list index_value
| index_value
;

index_value:
attribute_value
| index ':' attribute_value
| range ':' attribute_value
| '*' ':' attribute_value
;

range:
'[' int_const '-' int_const ']'
;

index:
LEX_INT
;

int_const:
LEX_INT
;

float_const:
LEX_FLOAT
;

str_const:
LEX_STRING
;