2014-11-12 07:35:44 +01:00
|
|
|
/* description: Parses end executes mathematical expressions. */
|
|
|
|
|
|
|
|
/* lexical grammar */
|
|
|
|
%lex
|
|
|
|
|
|
|
|
%%
|
|
|
|
"style" return 'STYLE';
|
2014-11-15 21:28:26 +01:00
|
|
|
"graph" return 'GRAPH';
|
|
|
|
"LR" return 'DIR';
|
|
|
|
"TD" return 'DIR';
|
2014-11-12 07:35:44 +01:00
|
|
|
\#[a-f0-9]+ return 'HEX';
|
|
|
|
[0-9]+ return 'NUM';
|
2014-11-13 19:51:05 +01:00
|
|
|
\# return 'BRKT';
|
2014-11-12 07:35:44 +01:00
|
|
|
"px" return 'UNIT';
|
|
|
|
"pt" return 'UNIT';
|
|
|
|
"dot" return 'UNIT';
|
|
|
|
":" return 'COLON';
|
2014-11-15 21:28:26 +01:00
|
|
|
";" return 'SEMI';
|
2014-11-12 07:35:44 +01:00
|
|
|
"," return 'COMMA';
|
2014-11-22 10:02:38 +01:00
|
|
|
"=" return 'EQUALS';
|
|
|
|
"*" return 'MULT';
|
|
|
|
"." return 'DOT';
|
|
|
|
"<" return 'TAGSTART';
|
|
|
|
">" return 'TAGEND';
|
|
|
|
\-\-[x] return 'ARROW_CROSS';
|
|
|
|
\-\-\> return 'ARROW_POINT';
|
2014-11-16 09:20:46 +01:00
|
|
|
\-\-[o] return 'ARROW_CIRCLE';
|
2014-11-22 10:02:38 +01:00
|
|
|
\-\-\- return 'ARROW_OPEN';
|
2014-11-16 09:20:46 +01:00
|
|
|
\- return 'MINUS';
|
2014-11-22 10:02:38 +01:00
|
|
|
\+ return 'PLUS';
|
|
|
|
\= return 'EQUALS';
|
|
|
|
[a-zåäöæøA-ZÅÄÖÆØ_]+ return 'ALPHA';
|
2014-11-12 07:35:44 +01:00
|
|
|
"|" return 'PIPE';
|
|
|
|
"(" return 'PS';
|
|
|
|
")" return 'PE';
|
|
|
|
"[" return 'SQS';
|
|
|
|
"]" return 'SQE';
|
|
|
|
"{" return 'DIAMOND_START'
|
|
|
|
"}" return 'DIAMOND_STOP'
|
|
|
|
\s return 'SPACE';
|
|
|
|
\n return 'NEWLINE';
|
|
|
|
<<EOF>> return 'EOF';
|
|
|
|
|
|
|
|
/lex
|
|
|
|
|
|
|
|
/* operator associations and precedence */
|
|
|
|
|
|
|
|
%left '^'
|
|
|
|
|
|
|
|
%start expressions
|
|
|
|
|
|
|
|
%% /* language grammar */
|
|
|
|
|
|
|
|
expressions
|
2014-11-15 21:28:26 +01:00
|
|
|
: graphConfig statements EOF
|
|
|
|
| graphConfig spaceList statements EOF
|
|
|
|
{$$=$1;}
|
2014-11-12 07:35:44 +01:00
|
|
|
;
|
|
|
|
|
2014-11-15 21:28:26 +01:00
|
|
|
graphConfig
|
|
|
|
: GRAPH SPACE DIR SEMI
|
2014-11-16 19:00:01 +01:00
|
|
|
{ yy.setDirection($3);$$ = $3;}
|
2014-11-13 19:51:05 +01:00
|
|
|
;
|
|
|
|
|
2014-11-15 21:28:26 +01:00
|
|
|
statements
|
|
|
|
: statements spaceList statement
|
|
|
|
| statement
|
2014-11-13 19:51:05 +01:00
|
|
|
;
|
|
|
|
|
2014-11-15 21:28:26 +01:00
|
|
|
spaceList
|
|
|
|
: SPACE spaceList
|
|
|
|
| SPACE
|
2014-11-13 19:51:05 +01:00
|
|
|
;
|
|
|
|
|
2014-11-15 21:28:26 +01:00
|
|
|
statement
|
|
|
|
: verticeStatement SEMI
|
|
|
|
| styleStatement SEMI
|
|
|
|
;
|
|
|
|
|
|
|
|
verticeStatement:
|
|
|
|
| vertex link vertex
|
2014-11-16 19:00:01 +01:00
|
|
|
{ yy.addLink($1,$3,$2);$$ = 'oy'}
|
2014-11-15 21:28:26 +01:00
|
|
|
| vertex
|
2014-11-16 19:00:01 +01:00
|
|
|
{$$ = 'yo';}
|
2014-11-15 21:28:26 +01:00
|
|
|
;
|
|
|
|
|
|
|
|
vertex: alphaNum SQS text SQE
|
2014-11-13 19:51:05 +01:00
|
|
|
{$$ = $1;yy.addVertex($1,$3,'square');}
|
2014-11-15 21:28:26 +01:00
|
|
|
| alphaNum PS text PE
|
2014-11-13 19:51:05 +01:00
|
|
|
{$$ = $1;yy.addVertex($1,$3,'round');}
|
2014-11-15 21:28:26 +01:00
|
|
|
| alphaNum DIAMOND_START text DIAMOND_STOP
|
2014-11-13 19:51:05 +01:00
|
|
|
{$$ = $1;yy.addVertex($1,$3,'diamond');}
|
2014-11-15 21:28:26 +01:00
|
|
|
| alphaNum
|
2014-11-16 19:00:01 +01:00
|
|
|
{$$ = $1;yy.addVertex($1);}
|
2014-11-15 21:28:26 +01:00
|
|
|
;
|
|
|
|
|
|
|
|
alphaNum
|
2014-11-16 09:20:46 +01:00
|
|
|
: alphaNumStatement
|
2014-11-15 21:28:26 +01:00
|
|
|
{$$=$1;}
|
2014-11-16 09:20:46 +01:00
|
|
|
| alphaNumStatement alphaNum
|
2014-11-15 21:28:26 +01:00
|
|
|
{$$=$1+''+$2;}
|
|
|
|
;
|
2014-11-16 09:20:46 +01:00
|
|
|
|
|
|
|
alphaNumStatement
|
|
|
|
: alphaNumToken
|
2014-11-16 19:00:01 +01:00
|
|
|
{$$=$1;}
|
2014-11-16 09:20:46 +01:00
|
|
|
| alphaNumToken MINUS alphaNumToken
|
|
|
|
{$$=$1+'-'+$3;}
|
|
|
|
;
|
|
|
|
|
2014-11-15 21:28:26 +01:00
|
|
|
alphaNumToken
|
|
|
|
: ALPHA
|
|
|
|
{$$=$1;}
|
|
|
|
| NUM
|
|
|
|
{$$=$1;}
|
2014-11-22 10:02:38 +01:00
|
|
|
| COLON
|
|
|
|
{$$ = $1;}
|
|
|
|
| COMMA
|
|
|
|
{$$ = $1;}
|
|
|
|
| PLUS
|
|
|
|
{$$ = $1;}
|
|
|
|
| EQUALS
|
|
|
|
{$$ = $1;}
|
|
|
|
| MULT
|
|
|
|
{$$ = $1;}
|
|
|
|
| DOT
|
|
|
|
{$$ = $1;}
|
|
|
|
| TAGSTART
|
|
|
|
{$$ = $1;}
|
|
|
|
| TAGEND
|
|
|
|
{$$ = $1;}
|
2014-11-15 21:28:26 +01:00
|
|
|
;
|
|
|
|
|
|
|
|
link: linkStatement arrowText
|
|
|
|
{$1.text = $2;$$ = $1;}
|
|
|
|
| linkStatement
|
|
|
|
{$$ = $1;}
|
|
|
|
;
|
|
|
|
|
2014-11-16 09:02:03 +01:00
|
|
|
linkStatement: ARROW_POINT
|
2014-11-15 21:28:26 +01:00
|
|
|
{$$ = {"type":"arrow"};}
|
2014-11-16 09:02:03 +01:00
|
|
|
| ARROW_CIRCLE
|
2014-11-15 21:28:26 +01:00
|
|
|
{$$ = {"type":"arrow_circle"};}
|
2014-11-16 09:02:03 +01:00
|
|
|
| ARROW_CROSS
|
2014-11-15 21:28:26 +01:00
|
|
|
{$$ = {"type":"arrow_cross"};}
|
2014-11-16 09:02:03 +01:00
|
|
|
| ARROW_OPEN
|
2014-11-15 21:28:26 +01:00
|
|
|
{$$ = {"type":"arrow_open"};}
|
2014-11-13 19:51:05 +01:00
|
|
|
;
|
2014-11-15 21:28:26 +01:00
|
|
|
|
|
|
|
arrowText:
|
|
|
|
PIPE text PIPE
|
2014-11-16 19:00:01 +01:00
|
|
|
{$$ = $2;}
|
2014-11-15 21:28:26 +01:00
|
|
|
;
|
|
|
|
|
2014-11-13 19:51:05 +01:00
|
|
|
// Characters and spaces
|
2014-11-16 14:41:41 +01:00
|
|
|
text: alphaNum SPACE text
|
2014-11-13 19:51:05 +01:00
|
|
|
{$$ = $1 + ' ' +$3;}
|
2014-11-16 19:00:01 +01:00
|
|
|
| alphaNum spaceList MINUS spaceList text
|
|
|
|
{$$ = $1 + ' - ' +$5;}
|
2014-11-16 14:41:41 +01:00
|
|
|
| alphaNum
|
2014-11-15 21:28:26 +01:00
|
|
|
{$$ = $1;}
|
2014-11-13 19:51:05 +01:00
|
|
|
;
|
|
|
|
|
2014-11-16 14:41:41 +01:00
|
|
|
styleStatement:STYLE SPACE alphaNum SPACE stylesOpt
|
2014-11-15 21:28:26 +01:00
|
|
|
{$$ = $1;yy.addVertex($3,undefined,undefined,$5);}
|
|
|
|
| STYLE SPACE HEX SPACE stylesOpt
|
2014-11-16 19:00:01 +01:00
|
|
|
{$$ = $1;yy.updateLink($3,$5);}
|
2014-11-13 19:51:05 +01:00
|
|
|
;
|
|
|
|
|
|
|
|
stylesOpt: style
|
|
|
|
{$$ = [$1]}
|
|
|
|
| stylesOpt COMMA style
|
|
|
|
{$1.push($3);$$ = $1;}
|
|
|
|
;
|
|
|
|
|
|
|
|
style: styleComponent
|
2014-11-12 07:35:44 +01:00
|
|
|
{$$=$1;}
|
2014-11-13 19:51:05 +01:00
|
|
|
|style styleComponent
|
|
|
|
{$$ = $1 + $2;}
|
2014-11-12 07:35:44 +01:00
|
|
|
;
|
|
|
|
|
2014-11-13 19:51:05 +01:00
|
|
|
styleComponent: ALPHA
|
|
|
|
{$$=$1}
|
|
|
|
| COLON
|
|
|
|
{$$=$1}
|
|
|
|
| MINUS
|
|
|
|
{$$=$1}
|
|
|
|
| NUM
|
|
|
|
{$$=$1}
|
|
|
|
| UNIT
|
|
|
|
{$$=$1}
|
|
|
|
| SPACE
|
|
|
|
{$$=$1}
|
|
|
|
| HEX
|
|
|
|
{$$=$1}
|
|
|
|
;
|
2014-11-16 19:00:01 +01:00
|
|
|
%%
|