Subversion Repositories planix.SVN

Rev

Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
2 - 1
%term	CONTIG QTEXT SPACE THIN TAB
2
%term	MATRIX LCOL CCOL RCOL COL ABOVE
3
%term	MARK LINEUP
4
%term	SUM INT PROD UNION INTER
5
%term	DEFINE TDEFINE NDEFINE DELIM GSIZE GFONT INCLUDE SPACE IFDEF
6
%term	DOTEQ DOTEN
7
 
8
%right	FROM TO
9
%left	OVER SQRT
10
%right	SUP SUB
11
%right	SIZE FONT ROMAN ITALIC BOLD FAT
12
%right	UP DOWN BACK FWD
13
%left	LEFT RIGHT
14
%right	DOT DOTDOT HAT TILDE BAR LOWBAR HIGHBAR UNDER VEC DYAD UTILDE
15
 
16
%{
17
#include "e.h"
18
 
19
int	yylex(void);
20
%}
21
 
22
%%
23
 
24
stuff	: eqn 		{ putout($1); }
25
	| error		{ ERROR "syntax error" WARNING; }	/* should be SYNTAX */
26
	|		{ eqnreg = 0; }
27
	;
28
 
29
eqn	: box
30
	| eqn box	{ eqnbox($1, $2, 0); }
31
	| eqn lineupbox	{ eqnbox($1, $2, 1); }
32
	| LINEUP	{ lineup(0); }
33
	;
34
 
35
lineupbox: LINEUP box	{ $$ = $2; lineup(1); }
36
	;
37
 
38
sbox	: SUP box	%prec SUP	{ $$ = $2; }
39
	|		%prec SUP	{ $$ = 0; }
40
	;
41
 
42
tbox	: TO box	%prec TO	{ $$ = $2; }
43
	|		%prec FROM	{ $$ = 0; }
44
	;
45
 
46
box	: '{' eqn '}'	{ $$ = $2; }
47
	| QTEXT		{ text(QTEXT, (char *) $1); }
48
	| CONTIG	{ text(CONTIG, (char *) $1); }
49
	| SPACE		{ text(SPACE, (char *) 0); }
50
	| THIN		{ text(THIN, (char *) 0); }
51
	| TAB		{ text(TAB, (char *) 0); }
52
	| SUM		{ funny(SUM); }
53
	| PROD		{ funny(PROD); }
54
	| UNION		{ funny(UNION); }
55
	| INTER		{ funny(INTER); }
56
 	| box OVER box			{ boverb($1, $3); }
57
	| MARK box			{ mark($2); }
58
	| size box	%prec SIZE	{ size($1, $2); }
59
	| font box	%prec FONT	{ font($1, $2); }
60
	| FAT box			{ fatbox($2); }
61
	| SQRT box			{ sqrt($2); }
62
	| box SUB {ps -= deltaps;} box sbox	%prec SUB	{ subsup($1, $4, $5); }
63
	| box SUP {ps -= deltaps;} box		%prec SUP	{ subsup($1, 0, $4); }
64
	| int SUB {ps -= deltaps;} box sbox	%prec SUB	{ integral($1, $4, $5); }
65
	| int SUP {ps -= deltaps;} box		%prec SUP	{ integral($1, 0, $4); }
66
	| int					{ integral($1, 0, 0); }
67
	| box FROM {ps -= deltaps;} box tbox	%prec FROM	{ fromto($1, $4, $5); }
68
	| box TO {ps -= deltaps;} box		%prec TO	{ fromto($1, 0, $4); }
69
	| left eqn right			{ paren($1, $2, $3); }
70
	| left eqn 				{ paren($1, $2, 0); }
71
	| box diacrit			{ diacrit($1, $2); }
72
	| fwd box	%prec UP	{ move(FWD, $1, $2); }
73
	| up box	%prec UP	{ move(UP, $1, $2); }
74
	| back box	%prec UP	{ move(BACK, $1, $2); }
75
	| down box	%prec UP	{ move(DOWN, $1, $2); }
76
	| column			{ pile($1); ct = $1; }
77
	| MATRIX {$$=ct;} '{' collist '}'	{ matrix($2); ct = $2; }
78
	;
79
 
80
int	: INT		{ setintegral(); }
81
	;
82
 
83
fwd	: FWD text	{ $$ = atoi((char *) $1); } ;
84
up	: UP text	{ $$ = atoi((char *) $1); } ;
85
back	: BACK text	{ $$ = atoi((char *) $1); } ;
86
down	: DOWN text	{ $$ = atoi((char *) $1); } ;
87
 
88
diacrit	: HAT		{ $$ = HAT; }
89
	| VEC		{ $$ = VEC; }
90
	| DYAD		{ $$ = DYAD; }
91
	| BAR		{ $$ = BAR; }
92
	| LOWBAR	{ $$ = LOWBAR; }
93
	| HIGHBAR	{ $$ = HIGHBAR; }
94
	| UNDER		{ $$ = UNDER; }	/* underbar */
95
	| DOT		{ $$ = DOT; }
96
	| TILDE		{ $$ = TILDE; }
97
	| UTILDE	{ $$ = UTILDE; }
98
	| DOTDOT	{ $$ = DOTDOT; } /* umlaut = double dot */
99
	;
100
 
101
left	: LEFT text	{ $$ = ((char *)$2)[0]; }
102
	| LEFT '{'	{ $$ = '{'; }
103
	;
104
 
105
right	: RIGHT text	{ $$ = ((char *)$2)[0]; }
106
	| RIGHT '}'	{ $$ = '}'; }
107
	;
108
 
109
collist	: column
110
	| collist column
111
	;
112
 
113
column	: col '{' list '}'				{ column($1, DEFGAP); }
114
	| col text {$$=atoi((char*)$2);} '{' list '}'	{ column($1, $3); }
115
	;
116
 
117
col	: LCOL		{ $$ = startcol(LCOL); }
118
	| CCOL		{ $$ = startcol(CCOL); }
119
	| RCOL		{ $$ = startcol(RCOL); }
120
	| COL		{ $$ = startcol(COL); }
121
	;
122
 
123
list	: eqn			{ lp[ct++] = $1; }
124
	| list ABOVE eqn	{ lp[ct++] = $3; }
125
	;
126
 
127
size	: SIZE text	{ $$ = ps; setsize((char *) $2); }
128
	;
129
 
130
font    : ROMAN         { static char R[]="R"; setfont(R); }
131
        | ITALIC        { static char I[]="I"; setfont(I); }
132
        | BOLD          { static char B[]="B"; setfont(B); }
133
        | FONT text     { setfont((char *)$2); }
134
        ;
135
 
136
text	: CONTIG
137
	| QTEXT
138
	;
139
 
140
%%