summaryrefslogtreecommitdiff
path: root/src/parser.y
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;
}