diff options
Diffstat (limited to 'LuaSL/src/LuaSL_lemon_yaccer.y')
-rw-r--r-- | LuaSL/src/LuaSL_lemon_yaccer.y | 32 |
1 files changed, 23 insertions, 9 deletions
diff --git a/LuaSL/src/LuaSL_lemon_yaccer.y b/LuaSL/src/LuaSL_lemon_yaccer.y index 5cffb73..9d08fa9 100644 --- a/LuaSL/src/LuaSL_lemon_yaccer.y +++ b/LuaSL/src/LuaSL_lemon_yaccer.y | |||
@@ -36,10 +36,10 @@ expr(A) ::= expr(B) LSL_LESS_THAN(C) expr(D). { A = addOperation(B, C, D); } | |||
36 | expr(A) ::= expr(B) LSL_RIGHT_SHIFT(C) expr(D). { A = addOperation(B, C, D); } | 36 | expr(A) ::= expr(B) LSL_RIGHT_SHIFT(C) expr(D). { A = addOperation(B, C, D); } |
37 | expr(A) ::= expr(B) LSL_LEFT_SHIFT(C) expr(D). { A = addOperation(B, C, D); } | 37 | expr(A) ::= expr(B) LSL_LEFT_SHIFT(C) expr(D). { A = addOperation(B, C, D); } |
38 | 38 | ||
39 | %left LSL_SUBTRACT LSL_ADD. | 39 | %left LSL_SUBTRACT LSL_ADD LSL_CONCATENATE. |
40 | expr(A) ::= expr(B) LSL_ADD(C) expr(D). { A = addOperation(B, C, D); } | 40 | expr(A) ::= expr(B) LSL_ADD(C) expr(D). { A = addOperation(B, C, D); } |
41 | expr(A) ::= expr(B) LSL_SUBTRACT(C) expr(D). { A = addOperation(B, C, D); } | 41 | expr(A) ::= expr(B) LSL_SUBTRACT(C) expr(D). { A = addOperation(B, C, D); } |
42 | %left LSL_DIVIDE LSL_MODULO LSL_MULTIPLY. | 42 | %left LSL_DIVIDE LSL_MODULO LSL_MULTIPLY LSL_DOT_PRODUCT LSL_CROSS_PRODUCT. |
43 | expr(A) ::= expr(B) LSL_MULTIPLY(C) expr(D). { A = addOperation(B, C, D); } | 43 | expr(A) ::= expr(B) LSL_MULTIPLY(C) expr(D). { A = addOperation(B, C, D); } |
44 | expr(A) ::= expr(B) LSL_MODULO(C) expr(D). { A = addOperation(B, C, D); } | 44 | expr(A) ::= expr(B) LSL_MODULO(C) expr(D). { A = addOperation(B, C, D); } |
45 | expr(A) ::= expr(B) LSL_DIVIDE(C) expr(D). { A = addOperation(B, C, D); } | 45 | expr(A) ::= expr(B) LSL_DIVIDE(C) expr(D). { A = addOperation(B, C, D); } |
@@ -49,29 +49,40 @@ expr(A) ::= LSL_BIT_NOT(B) expr(C). { A = addOperation(NULL, B, C); } | |||
49 | expr(A) ::= LSL_BOOL_NOT(B) expr(C). { A = addOperation(NULL, B, C); } | 49 | expr(A) ::= LSL_BOOL_NOT(B) expr(C). { A = addOperation(NULL, B, C); } |
50 | expr(A) ::= LSL_SUBTRACT(B) expr(C). [LSL_NEGATION] { A = addOperation(NULL, B, C); } | 50 | expr(A) ::= LSL_SUBTRACT(B) expr(C). [LSL_NEGATION] { A = addOperation(NULL, B, C); } |
51 | 51 | ||
52 | %right LSL_TYPECAST_OPEN LSL_TYPECAST_CLOSE. | ||
53 | %nonassoc LSL_TYPE_FLOAT LSL_TYPE_INTEGER LSL_TYPE_KEY LSL_TYPE_LIST LSL_TYPE_ROTATION LSL_TYPE_STRING LSL_TYPE_VECTOR. | ||
52 | %left LSL_ANGLE_OPEN LSL_ANGLE_CLOSE. | 54 | %left LSL_ANGLE_OPEN LSL_ANGLE_CLOSE. |
53 | %nonassoc LSL_BRACKET_OPEN LSL_BRACKET_CLOSE. | 55 | %nonassoc LSL_BRACKET_OPEN LSL_BRACKET_CLOSE. |
54 | %nonassoc LSL_PARENTHESIS_OPEN LSL_PARENTHESIS_CLOSE LSL_EXPRESSION. | 56 | %nonassoc LSL_PARENTHESIS_OPEN LSL_PARENTHESIS_CLOSE LSL_EXPRESSION. |
55 | expr(A) ::= LSL_PARENTHESIS_OPEN(B) expr(C) LSL_PARENTHESIS_CLOSE(D). { A = addParenthesis(B, C, D); } | 57 | expr(A) ::= LSL_PARENTHESIS_OPEN(B) expr(C) LSL_PARENTHESIS_CLOSE(D). { A = addParenthesis(B, C, D); } |
56 | 58 | ||
57 | %right LSL_ASSIGNMENT_ADD LSL_ASSIGNMENT_SUBTRACT LSL_ASSIGNMENT_MULTIPLY LSL_ASSIGNMENT_MODULO LSL_ASSIGNMENT_DIVIDE LSL_ASSIGNMENT_PLAIN. | 59 | expr(A) ::= LSL_PARENTHESIS_OPEN(B) LSL_TYPE_FLOAT(C) LSL_PARENTHESIS_CLOSE(D). { A = addTypecast(B, C, D); } |
60 | expr(A) ::= LSL_PARENTHESIS_OPEN(B) LSL_TYPE_INTEGER(C) LSL_PARENTHESIS_CLOSE(D). { A = addTypecast(B, C, D); } | ||
61 | expr(A) ::= LSL_PARENTHESIS_OPEN(B) LSL_TYPE_KEY(C) LSL_PARENTHESIS_CLOSE(D). { A = addTypecast(B, C, D); } | ||
62 | expr(A) ::= LSL_PARENTHESIS_OPEN(B) LSL_TYPE_LIST(C) LSL_PARENTHESIS_CLOSE(D). { A = addTypecast(B, C, D); } | ||
63 | expr(A) ::= LSL_PARENTHESIS_OPEN(B) LSL_TYPE_ROTATION(C) LSL_PARENTHESIS_CLOSE(D). { A = addTypecast(B, C, D); } | ||
64 | expr(A) ::= LSL_PARENTHESIS_OPEN(B) LSL_TYPE_STRING(C) LSL_PARENTHESIS_CLOSE(D). { A = addTypecast(B, C, D); } | ||
65 | expr(A) ::= LSL_PARENTHESIS_OPEN(B) LSL_TYPE_VECTOR(C) LSL_PARENTHESIS_CLOSE(D). { A = addTypecast(B, C, D); } | ||
66 | |||
67 | %right LSL_ASSIGNMENT_CONCATENATE LSL_ASSIGNMENT_ADD LSL_ASSIGNMENT_SUBTRACT LSL_ASSIGNMENT_MULTIPLY LSL_ASSIGNMENT_MODULO LSL_ASSIGNMENT_DIVIDE LSL_ASSIGNMENT_PLAIN. | ||
58 | %right LSL_DOT. | 68 | %right LSL_DOT. |
59 | %right LSL_DECREMENT_PRE LSL_INCREMENT_PRE. | 69 | %right LSL_DECREMENT_PRE LSL_INCREMENT_PRE LSL_DECREMENT_POST LSL_INCREMENT_POST. |
60 | %nonassoc LSL_COMMA. | 70 | %nonassoc LSL_COMMA. |
61 | 71 | ||
62 | %nonassoc LSL_FLOAT. | 72 | %nonassoc LSL_FLOAT. |
63 | expr(A) ::= LSL_FLOAT(B). { B->basicType = OT_float; A = B; } | 73 | expr(A) ::= LSL_FLOAT(B). { B->basicType = OT_float; A = B; } |
64 | %nonassoc LSL_INTEGER. | 74 | %nonassoc LSL_INTEGER. |
65 | expr(A) ::= LSL_INTEGER(B). { B->basicType = OT_integer; A = B; } | 75 | expr(A) ::= LSL_INTEGER(B). { B->basicType = OT_integer; A = B; } |
76 | %nonassoc LSL_KEY. | ||
77 | %nonassoc LSL_LIST. | ||
78 | %nonassoc LSL_ROTATION. | ||
79 | %nonassoc LSL_STRING. | ||
80 | %nonassoc LSL_VECTOR. | ||
66 | 81 | ||
67 | %nonassoc LSL_TYPE_FLOAT LSL_TYPE_INTEGER LSL_TYPE_KEY LSL_TYPE_LIST LSL_TYPE_ROTATION LSL_TYPE_STRING LSL_TYPE_VECTOR. | 82 | %nonassoc LSL_DO LSL_FOR LSL_ELSE LSL_ELSE_IF LSL_IF LSL_JUMP LSL_RETURN LSL_STATE_CHANGE LSL_WHILE. |
68 | |||
69 | %nonassoc LSL_DO LSL_FOR LSL_ELSE LSL_IF LSL_JUMP LSL_RETURN LSL_STATE_CHANGE LSL_WHILE. | ||
70 | 83 | ||
71 | %nonassoc LSL_LABEL. | 84 | %nonassoc LSL_LABEL. |
72 | 85 | ||
73 | %nonassoc LSL_BLOCK_OPEN LSL_BLOCK_CLOSE. | ||
74 | |||
75 | %nonassoc LSL_STATEMENT. | 86 | %nonassoc LSL_STATEMENT. |
76 | statement(A) ::= expr(B) LSL_STATEMENT(D). { A = addStatement(D, LSL_EXPRESSION, B); } | 87 | statement(A) ::= expr(B) LSL_STATEMENT(D). { A = addStatement(D, LSL_EXPRESSION, B); } |
77 | 88 | ||
@@ -79,6 +90,9 @@ statement(A) ::= expr(B) LSL_STATEMENT(D). { A = addStatement(D, LSL_EXPRESS | |||
79 | script ::= script statement(A). { A->left = param->ast; param->ast = A; } | 90 | script ::= script statement(A). { A->left = param->ast; param->ast = A; } |
80 | script ::= statement(A). { A->left = param->ast; param->ast = A; } | 91 | script ::= statement(A). { A->left = param->ast; param->ast = A; } |
81 | 92 | ||
93 | %nonassoc LSL_BLOCK_OPEN LSL_BLOCK_CLOSE. | ||
94 | %nonassoc LSL_PARAMETER LSL_FUNCTION LSL_STATE. | ||
95 | |||
82 | %nonassoc LSL_SPACE LSL_COMMENT LSL_COMMENT_LINE LSL_UNKNOWN. | 96 | %nonassoc LSL_SPACE LSL_COMMENT LSL_COMMENT_LINE LSL_UNKNOWN. |
83 | 97 | ||
84 | 98 | ||