aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/LuaSL/src/LuaSL_yaccer.y
diff options
context:
space:
mode:
Diffstat (limited to 'LuaSL/src/LuaSL_yaccer.y')
-rw-r--r--LuaSL/src/LuaSL_yaccer.y65
1 files changed, 30 insertions, 35 deletions
diff --git a/LuaSL/src/LuaSL_yaccer.y b/LuaSL/src/LuaSL_yaccer.y
index 4b456b1..ed69dd3 100644
--- a/LuaSL/src/LuaSL_yaccer.y
+++ b/LuaSL/src/LuaSL_yaccer.y
@@ -10,10 +10,9 @@
10%define api.pure 10%define api.pure
11 11
12 12
13%type <spaceValue> ignorable 13%token <value.spaceValue> LSL_SPACE /* Never actually emitted, but we need it in the token table. */
14%token <spaceValue> LSL_SPACE
15 14
16%type <expressionValue> expr 15%type <value.expressionValue> expr
17%left LSL_BOOL_AND 16%left LSL_BOOL_AND
18%left LSL_BOOL_OR 17%left LSL_BOOL_OR
19%left LSL_BIT_AND LSL_BIT_XOR LSL_BIT_OR 18%left LSL_BIT_AND LSL_BIT_XOR LSL_BIT_OR
@@ -31,8 +30,8 @@
31%right LSL_DECREMENT_PRE LSL_INCREMENT_PRE 30%right LSL_DECREMENT_PRE LSL_INCREMENT_PRE
32%token LSL_COMMA 31%token LSL_COMMA
33 32
34%token <floatValue> LSL_FLOAT 33%token <value.floatValue> LSL_FLOAT
35%token <integerValue> LSL_INTEGER 34%token <value.integerValue> LSL_INTEGER
36 35
37%nonassoc LSL_TYPE_FLOAT LSL_TYPE_INTEGER LSL_TYPE_KEY LSL_TYPE_LIST LSL_TYPE_ROTATION LSL_TYPE_STRING LSL_TYPE_VECTOR 36%nonassoc LSL_TYPE_FLOAT LSL_TYPE_INTEGER LSL_TYPE_KEY LSL_TYPE_LIST LSL_TYPE_ROTATION LSL_TYPE_STRING LSL_TYPE_VECTOR
38 37
@@ -42,47 +41,43 @@
42 41
43%nonassoc LSL_BLOCK_OPEN LSL_BLOCK_CLOSE 42%nonassoc LSL_BLOCK_OPEN LSL_BLOCK_CLOSE
44 43
45%type <statementValue> statement 44%type <value.statementValue> statement
46%nonassoc LSL_STATEMENT 45%nonassoc LSL_STATEMENT
47 46
48%type <scriptValue> script 47%type <value.scriptValue> script
49 48
50%% 49%%
51 50
52input : 51input :
53 ignorable 52 expr { ((LuaSL_yyparseParam*)data)->ast = addOperation(&yylval, LSL_EXPRESSION, $1, $1); }
54 | expr { ((LuaSL_yyparseParam*)data)->ast = addOperation(LSL_EXPRESSION, $1, $1); }
55 | statement { ((LuaSL_yyparseParam*)data)->ast = addStatement($1, ((LuaSL_yyparseParam*)data)->ast); } 53 | statement { ((LuaSL_yyparseParam*)data)->ast = addStatement($1, ((LuaSL_yyparseParam*)data)->ast); }
56 | script 54 | script
57; 55;
58 56
59ignorable : LSL_SPACE { ((LuaSL_yyparseParam*)data)->ast = addSpace($1, ((LuaSL_yyparseParam*)data)->ast); }
60;
61
62expr : 57expr :
63 expr LSL_BOOL_AND expr { $$ = addOperation( LSL_BOOL_AND, $1, $3 ); } 58 expr LSL_BOOL_AND expr { $$ = addOperation(&yylval, LSL_BOOL_AND, $1, $3); }
64 | expr LSL_BOOL_OR expr { $$ = addOperation( LSL_BOOL_OR, $1, $3 ); } 59 | expr LSL_BOOL_OR expr { $$ = addOperation(&yylval, LSL_BOOL_OR, $1, $3); }
65 | expr LSL_BIT_OR expr { $$ = addOperation( LSL_BIT_OR, $1, $3 ); } 60 | expr LSL_BIT_OR expr { $$ = addOperation(&yylval, LSL_BIT_OR, $1, $3); }
66 | expr LSL_BIT_XOR expr { $$ = addOperation( LSL_BIT_XOR, $1, $3 ); } 61 | expr LSL_BIT_XOR expr { $$ = addOperation(&yylval, LSL_BIT_XOR, $1, $3); }
67 | expr LSL_BIT_AND expr { $$ = addOperation( LSL_BIT_AND, $1, $3 ); } 62 | expr LSL_BIT_AND expr { $$ = addOperation(&yylval, LSL_BIT_AND, $1, $3); }
68 | expr LSL_NOT_EQUAL expr { $$ = addOperation( LSL_NOT_EQUAL, $1, $3 ); } 63 | expr LSL_NOT_EQUAL expr { $$ = addOperation(&yylval, LSL_NOT_EQUAL, $1, $3); }
69 | expr LSL_EQUAL expr { $$ = addOperation( LSL_EQUAL, $1, $3 ); } 64 | expr LSL_EQUAL expr { $$ = addOperation(&yylval, LSL_EQUAL, $1, $3); }
70 | expr LSL_GREATER_EQUAL expr { $$ = addOperation( LSL_GREATER_EQUAL, $1, $3 ); } 65 | expr LSL_GREATER_EQUAL expr { $$ = addOperation(&yylval, LSL_GREATER_EQUAL, $1, $3); }
71 | expr LSL_LESS_EQUAL expr { $$ = addOperation( LSL_LESS_EQUAL, $1, $3 ); } 66 | expr LSL_LESS_EQUAL expr { $$ = addOperation(&yylval, LSL_LESS_EQUAL, $1, $3); }
72 | expr LSL_GREATER_THAN expr { $$ = addOperation( LSL_GREATER_THAN, $1, $3 ); } 67 | expr LSL_GREATER_THAN expr { $$ = addOperation(&yylval, LSL_GREATER_THAN, $1, $3); }
73 | expr LSL_LESS_THAN expr { $$ = addOperation( LSL_LESS_THAN, $1, $3 ); } 68 | expr LSL_LESS_THAN expr { $$ = addOperation(&yylval, LSL_LESS_THAN, $1, $3); }
74 | expr LSL_RIGHT_SHIFT expr { $$ = addOperation( LSL_RIGHT_SHIFT, $1, $3 ); } 69 | expr LSL_RIGHT_SHIFT expr { $$ = addOperation(&yylval, LSL_RIGHT_SHIFT, $1, $3); }
75 | expr LSL_LEFT_SHIFT expr { $$ = addOperation( LSL_LEFT_SHIFT, $1, $3 ); } 70 | expr LSL_LEFT_SHIFT expr { $$ = addOperation(&yylval, LSL_LEFT_SHIFT, $1, $3); }
76 | expr LSL_ADD expr { $$ = addOperation( LSL_ADD, $1, $3 ); } 71 | expr LSL_ADD expr { $$ = addOperation(&yylval, LSL_ADD, $1, $3); }
77 | expr LSL_SUBTRACT expr { $$ = addOperation( LSL_SUBTRACT, $1, $3 ); } 72 | expr LSL_SUBTRACT expr { $$ = addOperation(&yylval, LSL_SUBTRACT, $1, $3); }
78 | expr LSL_MULTIPLY expr { $$ = addOperation( LSL_MULTIPLY, $1, $3 ); } 73 | expr LSL_MULTIPLY expr { $$ = addOperation(&yylval, LSL_MULTIPLY, $1, $3); }
79 | expr LSL_MODULO expr { $$ = addOperation( LSL_MODULO, $1, $3 ); } 74 | expr LSL_MODULO expr { $$ = addOperation(&yylval, LSL_MODULO, $1, $3); }
80 | expr LSL_DIVIDE expr { $$ = addOperation( LSL_DIVIDE, $1, $3 ); } 75 | expr LSL_DIVIDE expr { $$ = addOperation(&yylval, LSL_DIVIDE, $1, $3); }
81 | LSL_BIT_NOT expr { $$ = addOperation( LSL_BIT_NOT, NULL, $2 ); } 76 | LSL_BIT_NOT expr { $$ = addOperation(&yylval, LSL_BIT_NOT, NULL, $2); }
82 | LSL_BOOL_NOT expr { $$ = addOperation( LSL_BOOL_NOT, NULL, $2 ); } 77 | LSL_BOOL_NOT expr { $$ = addOperation(&yylval, LSL_BOOL_NOT, NULL, $2); }
83 | LSL_SUBTRACT expr { $$ = addOperation( LSL_NEGATION, NULL, $2 ); } %prec LSL_NEGATION 78 | LSL_SUBTRACT expr { $$ = addOperation(&yylval, LSL_NEGATION, NULL, $2); } %prec LSL_NEGATION
84 | LSL_PARENTHESIS_OPEN expr LSL_PARENTHESIS_CLOSE { $$ = addParenthesis($2); } 79 | LSL_PARENTHESIS_OPEN expr LSL_PARENTHESIS_CLOSE { $$ = addParenthesis(&yylval, $2); }
85 | LSL_INTEGER { $$ = addInteger($1); } 80 | LSL_INTEGER { $$ = addInteger(&yylval, $1); }
86; 81;
87 82
88statement : expr LSL_STATEMENT { $$ = createStatement(LSL_EXPRESSION, $1); YYVALID; } 83statement : expr LSL_STATEMENT { $$ = createStatement(LSL_EXPRESSION, $1); YYVALID; }