/* bison parser specification of VCG version "1.30.4 20010105 (release)"     */
/* grammar.pgs,v 3.17 1995/02/08 18:35:02 sander Exp $ */

%token LEXWORD_ABOVE LEXWORD_ANCHORPOINTS LEXWORD_ANCHOR LEXWORD_AQUAMARINE %token LEXWORD_AROUND LEXWORD_ARROWMODE LEXWORD_ARROWHEIGHT %token LEXWORD_ARROWWIDTH LEXWORD_ARROWCOLOR LEXWORD_ARROWSTYLE %token LEXWORD_ARROWSIZE LEXWORD_BARROWCOLOR LEXWORD_BARROWSTYLE %token LEXWORD_BARROWSIZE LEXWORD_BACKEDGE LEXWORD_BARYCENTER LEXWORD_BARY %token LEXWORD_BARYMEDIAN LEXWORD_BEHIND LEXWORD_BELOW LEXWORD_BLACK %token LEXWORD_BLUE LEXWORD_BMAX LEXWORD_BORDERCOLOR LEXWORD_BORDERWIDTH %token LEXWORD_BOTTOM_MARGIN LEXWORD_BOTTOM_TO_TOP LEXWORD_BOTTOM %token LEXWORD_BOX LEXWORD_BENTNEAREDGE LEXWORD_CENTER LEXWORD_CFISH %token LEXWORD_CLASSNAME LEXWORD_CLASS LEXWORD_CLUSTER LEXWORD_CMIN %token LEXWORD_CMAX LEXWORD_COLORENTRY LEXWORD_COLOR LEXWORD_CONSTRAINTS %token LEXWORD_CONSTRAINT LEXWORD_CONTINUOUS LEXWORD_CROSSING_WEIGHT %token LEXWORD_CROSSING_OPT LEXWORD_CROSSING_P2 LEXWORD_CYAN %token LEXWORD_DARKBLUE LEXWORD_DARKCYAN LEXWORD_DARKGREEN LEXWORD_DARKGREY %token LEXWORD_DARKMAGENTA LEXWORD_DARKRED LEXWORD_DARKYELLOW %token LEXWORD_DASHED LEXWORD_DFS LEXWORD_DIMENSION %token LEXWORD_DIRTY_EDGE_LABELS LEXWORD_DISPLAY_EDGE_LABELS LEXWORD_DOTTED %token LEXWORD_EDGE1 LEXWORD_EDGE2 LEXWORD_EDGES LEXWORD_ELLIPSE %token LEXWORD_EQUAL_COLUMN LEXWORD_EQUAL_POSITION LEXWORD_EQUAL_ROW %token LEXWORD_EQUAL LEXWORD_EVERY LEXWORD_FCFISH LEXWORD_FPFISH %token LEXWORD_FIXED LEXWORD_FREE LEXWORD_FINETUNING LEXWORD_FOLDEDGE %token LEXWORD_FOLDNODE LEXWORD_FOLDING LEXWORD_FONTNAME LEXWORD_GOLD %token LEXWORD_GRAPH LEXWORD_GREATER LEXWORD_GREEN LEXWORD_GREY %token LEXWORD_HEIGHT LEXWORD_HIDESINGLES LEXWORD_HIGH_MARGIN LEXWORD_HIGH %token LEXWORD_HIDDEN LEXWORD_HORDER LEXWORD_ICONFILE LEXWORD_ICONHEIGHT %token LEXWORD_ICONSTYLE LEXWORD_ICONWIDTH LEXWORD_INCLUDE LEXWORD_INFONAME %token LEXWORD_INFO1 LEXWORD_INFO2 LEXWORD_INFO3 LEXWORD_INPUTFUNCTION %token LEXWORD_INTERVAL LEXWORD_INVISIBLE LEXWORD_IN_FRONT LEXWORD_ISI %token LEXWORD_KHAKI LEXWORD_TEXTCOLOR LEXWORD_LABEL LEXWORD_LATE_LABELS %token LEXWORD_LAYOUTALGORITHM LEXWORD_LAYOUTFREQUENCY %token LEXWORD_LAYOUTPARAMETER LEXWORD_LAYOUTDOWNFACTOR %token LEXWORD_LAYOUTUPFACTOR LEXWORD_LAYOUTNEARFACTOR %token LEXWORD_LAYOUTSPLINEFACTOR LEXWORD_LEFT_JUSTIFY LEXWORD_LEFT_MARGIN %token LEXWORD_LEFT_NEIGHBOR LEXWORD_LEFT_TO_RIGHT LEXWORD_LEFT %token LEXWORD_LEVEL LEXWORD_VORDER LEXWORD_LIGHTBLUE LEXWORD_LIGHTCYAN %token LEXWORD_LIGHTGREEN LEXWORD_LIGHTGREY LEXWORD_LIGHTMAGENTA %token LEXWORD_LIGHTRED LEXWORD_LIGHTYELLOW LEXWORD_LILAC LEXWORD_LIMIT %token LEXWORD_LINE LEXWORD_LINESTYLE LEXWORD_LOC LEXWORD_LOWER_NEIGHBOR %token LEXWORD_LOW_MARGIN LEXWORD_LOW LEXWORD_MAGENTA LEXWORD_MANHATTEN %token LEXWORD_MANUAL LEXWORD_MAXDEPTHSLOW LEXWORD_MAXDEPTH %token LEXWORD_MAXDEGREE LEXWORD_MAXINDEGREE LEXWORD_MAXOUTDEGREE %token LEXWORD_MEDIAN LEXWORD_MEDIANBARY LEXWORD_MINDEPTHSLOW %token LEXWORD_MINDEPTH LEXWORD_MINDEGREE LEXWORD_MININDEGREE %token LEXWORD_MINOUTDEGREE LEXWORD_MINBACK LEXWORD_NAME LEXWORD_NEAREDGE %token LEXWORD_NEIGHBORS LEXWORD_NEAREDGES LEXWORD_NONEAREDGES %token LEXWORD_NODE1 LEXWORD_NODE2 LEXWORD_NODES LEXWORD_NODE_ALIGN %token LEXWORD_NONE LEXWORD_NO LEXWORD_ORANGE LEXWORD_ORCHID %token LEXWORD_ORIENTATION LEXWORD_OUTPUTFUNCTION LEXWORD_PFISH %token LEXWORD_PINK LEXWORD_PLANAR LEXWORD_PMIN LEXWORD_PMAX %token LEXWORD_PORTSHARING LEXWORD_PRIORITYPHASE LEXWORD_PRIORITY %token LEXWORD_PURPLE LEXWORD_RANGE LEXWORD_RED LEXWORD_RHOMB %token LEXWORD_RIGHT_JUSTIFY LEXWORD_RIGHT_MARGIN LEXWORD_RIGHT_NEIGHBOR %token LEXWORD_RIGHT_TO_LEFT LEXWORD_RIGHT LEXWORD_RMIN LEXWORD_RMAX %token LEXWORD_SCALING LEXWORD_SHAPE LEXWORD_SHRINK LEXWORD_SMAX %token LEXWORD_SMANHATTEN LEXWORD_SIZE LEXWORD_SMALLER LEXWORD_SOLID %token LEXWORD_SOURCENAME LEXWORD_SPLINES LEXWORD_SPREADLEVEL %token LEXWORD_STATUS LEXWORD_STRETCH LEXWORD_STRAIGHTPHASE %token LEXWORD_TARGETNAME LEXWORD_TEXTMODE LEXWORD_THICKNESS LEXWORD_TITLE %token LEXWORD_TOPSORT LEXWORD_TOP_MARGIN LEXWORD_TOP_TO_BOTTOM LEXWORD_TOP %token LEXWORD_TREE LEXWORD_TREEFACTOR LEXWORD_TRIANGLE LEXWORD_TURQUOISE %token LEXWORD_TYPENAME LEXWORD_UPPER_NEIGHBOR LEXWORD_VIEW LEXWORD_WHITE %token LEXWORD_WIDTH LEXWORD_XBASE LEXWORD_XMAX LEXWORD_XRASTER %token LEXWORD_XLRASTER LEXWORD_XSCROLLBAR LEXWORD_XSPACE LEXWORD_XLSPACE %token LEXWORD_YBASE LEXWORD_YELLOWGREEN LEXWORD_YELLOW LEXWORD_YES %token LEXWORD_YMAX LEXWORD_YRASTER LEXWORD_YSCROLLBAR LEXWORD_YSPACE %token LEX_INT LEX_FLOAT 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
| bentnearedge
| backedge
| constraint
;

graph_attribute:
LEXWORD_TITLE ':' str_const
| LEXWORD_LABEL ':' str_const
| LEXWORD_INFO1 ':' str_const
| LEXWORD_INFO2 ':' str_const
| LEXWORD_INFO3 ':' str_const
| LEXWORD_COLOR ':' enum_color
| LEXWORD_TEXTCOLOR ':' enum_color
| LEXWORD_BORDERCOLOR ':' enum_color
| LEXWORD_WIDTH ':' int_const
| LEXWORD_HEIGHT ':' int_const
| LEXWORD_BORDERWIDTH ':' int_const
| 'x' ':' int_const
| 'y' ':' 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_TEXTMODE ':' enum_textmode
| LEXWORD_SHAPE ':' enum_shape
| LEXWORD_LEVEL ':' int_const
| LEXWORD_VORDER ':' int_const
| LEXWORD_HORDER ':' int_const
| LEXWORD_STATUS ':' enum_status
| LEXWORD_XMAX ':' int_const
| LEXWORD_YMAX ':' 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_INVISIBLE ':' int_const
| LEXWORD_HIDDEN ':' int_const
| LEXWORD_CLASSNAME int_const ':' str_const
| LEXWORD_INFONAME int_const ':' str_const
| LEXWORD_COLORENTRY int_const ':' int_const int_const int_const
| 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_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_HIDESINGLES ':' enum_yes_no
| LEXWORD_STRAIGHTPHASE ':' enum_yes_no
| LEXWORD_PRIORITYPHASE ':' enum_yes_no
| LEXWORD_MANHATTEN ':' enum_yes_no
| LEXWORD_SMANHATTEN ':' enum_yes_no
| LEXWORD_NONEAREDGES
| LEXWORD_NEAREDGES ':' LEXWORD_NO
| LEXWORD_NEAREDGES ':' LEXWORD_YES
| LEXWORD_ORIENTATION ':' enum_orientation
| LEXWORD_NODE_ALIGN ':' enum_node_align
| LEXWORD_PORTSHARING ':' enum_yes_no
| LEXWORD_ARROWMODE ':' enum_arrow_mode
| LEXWORD_SPREADLEVEL ':' int_const
| LEXWORD_TREEFACTOR ':' float_const
| LEXWORD_CROSSING_P2 ':' enum_yes_no
| LEXWORD_CROSSING_OPT ':' enum_yes_no
| LEXWORD_CROSSING_WEIGHT ':' enum_cross_weight
| LEXWORD_VIEW ':' enum_view
| LEXWORD_EDGES ':' enum_yes_no
| LEXWORD_NODES ':' enum_yes_no
| LEXWORD_SPLINES ':' enum_yes_no
| LEXWORD_BMAX ':' int_const
| LEXWORD_CMAX ':' int_const
| LEXWORD_CMIN ':' int_const
| LEXWORD_PMAX ':' int_const
| LEXWORD_PMIN ':' int_const
| LEXWORD_RMAX ':' int_const
| LEXWORD_RMIN ':' int_const
| LEXWORD_SMAX ':' int_const
| LEXWORD_TYPENAME ':' str_const
| LEXWORD_INCLUDE ':' str_const
| LEXWORD_LAYOUTPARAMETER ':' array_value
| LEXWORD_TOPSORT ':' enum_topsort
| LEXWORD_INPUTFUNCTION ':' str_const
| LEXWORD_OUTPUTFUNCTION ':' str_const
| LEXWORD_XSCROLLBAR ':' int_const
| LEXWORD_YSCROLLBAR ':' int_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
| int_const
;

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
| LEXWORD_DFS
;

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
| LEXWORD_BARYMEDIAN
| LEXWORD_MEDIANBARY
;

enum_view:
LEXWORD_CFISH
| LEXWORD_FCFISH
| LEXWORD_PFISH
| LEXWORD_FPFISH
;

enum_arrow_mode:
LEXWORD_FIXED
| LEXWORD_FREE
;

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 '}'
;

bentnearedge:
LEXWORD_BENTNEAREDGE '{' edge_attribute_list '}'
;

backedge:
LEXWORD_BACKEDGE '{' 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_TEXTCOLOR ':' enum_color
| LEXWORD_FONTNAME ':' str_const
| LEXWORD_COLOR ':' 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_ARROWCOLOR ':' enum_color
| LEXWORD_BARROWCOLOR ':' enum_color
| LEXWORD_ARROWSIZE ':' int_const
| LEXWORD_BARROWSIZE ':' int_const
| LEXWORD_ARROWSTYLE ':' enum_arrowstyle
| LEXWORD_BARROWSTYLE ':' enum_arrowstyle
| LEXWORD_LINESTYLE ':' enum_linestyle
| 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_FRONT
| 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
;