File: tree.tc

package info (click to toggle)
dicelab 0.7-8
  • links: PTS, VCS
  • area: main
  • in suites: experimental
  • size: 1,936 kB
  • sloc: ansic: 4,808; sh: 1,162; yacc: 239; perl: 108; lex: 58; makefile: 44
file content (133 lines) | stat: -rw-r--r-- 1,655 bytes parent folder | download | duplicates (7)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
%option lang = "C"
%option track_lines

%decls %{
#include  "roll.h"
%}

%{
#include <stdio.h>
#include <math.h>
#include <string.h>
#include "tree.h"
#include "util.h"

int yyerror(char *s);

%}

%enum filter_type =
{
	drop,
    keep
}

%enum comparison_type =
{
	eq,
    ne,
	lt,
	gt,
	le,
	ge
}

%enum ordering_type =
{
	agnostic,
	caring
}

%node expression %abstract %typedef =
{
	%nocreate struct symtab *symtab = {NULL};
	%nocreate ordering_type ordering = {caring};
}

%node elist expression

%node binary expression %abstract  =
{
    expression *expr1;
    expression *expr2;
}

%node unary expression %abstract =
{
    expression *expr;
}

%node number expression = {
	int num;
}

%node negate unary
%node dice unary
%node sum unary
%node prod unary
%node count unary
%node perm unary
%node sort unary
%node rev unary

%node mathop binary %abstract
%node plus mathop
%node minus mathop
%node multi mathop
%node divi mathop
%node mod mathop
%node expo mathop

%node scat binary
%node rep binary
%node range binary
%node lcat binary

%node ifthenelse expression =
{
    expression *if_expr;
    expression *then_expr;
    expression *else_expr;
}

%node filter binary %abstract =
{
    filter_type type;
}

%node first filter
%node last filter
%node high filter
%node low filter

%node comparison filter = 
{
	comparison_type comp;
}

%node let binary = 
{
	char *varname;
}

%node foreach binary = 
{
	char *varname;
}

%node whiledo binary = 
{
	char *varname;
}

%node variable expression = 
{
	char * varname;
}

%include "printtree.tc"
%include "roll.tc"
%include "symtab.tc"
%include "ordering.tc"
%include "eval.tc"
%include "optimize.tc"