blob: b3da848f8560a83756c83f6a1a860f0021fe5631 (
plain)
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
|
%{
#include <stdint.h>
#include <stdio.h>
int yylex();
void yyerror( const char *error ) { printf("%s\n", error ); }
%}
%union {
int64_t iValue;
double dValue;
char *sValue;
}
%token tokGame
%token tokFunction
%token tokSituation
%token tokWhile
%token tokFor
%token tokEach
%token tokIn
%token tokIf
%token tokThen
%token tokElse
%token tokCommand
%token tokSituationName
%token tokIdent
%token tokGoto
%token tokString
%token tokInt
%token tokFloat
%token tokBool
%token tokNull
%token eos 0 "end of stream"
%left '(' ')' '[' ']'
%left '*' '/'
%left '-' '+'
%%
input:
| input situation
| input function
;
situation: tokSituation tokSituationName '{' cmpltExprList '}'
;
function: tokFunction tokIdent '(' ')' '{' '}'
;
cmpltExprList:
| cmpltExprList cmpltExpr
;
cmpltExpr: expr ';'
;
expr: tokInt
| tokFloat
| tokString
| tokBool
| tokNull
| tokSituationName
| expr '+' expr
| expr '-' expr
| expr '/' expr
| expr '*' expr
| '(' expr ')'
| expr '[' expr ']'
| tokGoto '(' expr ')'
;
%%
int main()
{
yyparse();
return 0;
}
|