aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/LuaSL/src/LuaSL_lemon_yaccer.y
diff options
context:
space:
mode:
authorDavid Walter Seikel2012-01-16 00:54:18 +1000
committerDavid Walter Seikel2012-01-16 00:54:18 +1000
commitcb95506e6aa887d1f810759f626e3934b6a87201 (patch)
tree6fe770229f3e261c7ad6e9fdf6c8bea0becbc126 /LuaSL/src/LuaSL_lemon_yaccer.y
parentReport line and column in syntax errors, and stack overflows. (diff)
downloadSledjHamr-cb95506e6aa887d1f810759f626e3934b6a87201.zip
SledjHamr-cb95506e6aa887d1f810759f626e3934b6a87201.tar.gz
SledjHamr-cb95506e6aa887d1f810759f626e3934b6a87201.tar.bz2
SledjHamr-cb95506e6aa887d1f810759f626e3934b6a87201.tar.xz
Fill out the rest of theparser symbols, and partiallyimplement typecasting.
Diffstat (limited to '')
-rw-r--r--LuaSL/src/LuaSL_lemon_yaccer.y32
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); }
36expr(A) ::= expr(B) LSL_RIGHT_SHIFT(C) expr(D). { A = addOperation(B, C, D); } 36expr(A) ::= expr(B) LSL_RIGHT_SHIFT(C) expr(D). { A = addOperation(B, C, D); }
37expr(A) ::= expr(B) LSL_LEFT_SHIFT(C) expr(D). { A = addOperation(B, C, D); } 37expr(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.
40expr(A) ::= expr(B) LSL_ADD(C) expr(D). { A = addOperation(B, C, D); } 40expr(A) ::= expr(B) LSL_ADD(C) expr(D). { A = addOperation(B, C, D); }
41expr(A) ::= expr(B) LSL_SUBTRACT(C) expr(D). { A = addOperation(B, C, D); } 41expr(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.
43expr(A) ::= expr(B) LSL_MULTIPLY(C) expr(D). { A = addOperation(B, C, D); } 43expr(A) ::= expr(B) LSL_MULTIPLY(C) expr(D). { A = addOperation(B, C, D); }
44expr(A) ::= expr(B) LSL_MODULO(C) expr(D). { A = addOperation(B, C, D); } 44expr(A) ::= expr(B) LSL_MODULO(C) expr(D). { A = addOperation(B, C, D); }
45expr(A) ::= expr(B) LSL_DIVIDE(C) expr(D). { A = addOperation(B, C, D); } 45expr(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); }
49expr(A) ::= LSL_BOOL_NOT(B) expr(C). { A = addOperation(NULL, B, C); } 49expr(A) ::= LSL_BOOL_NOT(B) expr(C). { A = addOperation(NULL, B, C); }
50expr(A) ::= LSL_SUBTRACT(B) expr(C). [LSL_NEGATION] { A = addOperation(NULL, B, C); } 50expr(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.
55expr(A) ::= LSL_PARENTHESIS_OPEN(B) expr(C) LSL_PARENTHESIS_CLOSE(D). { A = addParenthesis(B, C, D); } 57expr(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. 59expr(A) ::= LSL_PARENTHESIS_OPEN(B) LSL_TYPE_FLOAT(C) LSL_PARENTHESIS_CLOSE(D). { A = addTypecast(B, C, D); }
60expr(A) ::= LSL_PARENTHESIS_OPEN(B) LSL_TYPE_INTEGER(C) LSL_PARENTHESIS_CLOSE(D). { A = addTypecast(B, C, D); }
61expr(A) ::= LSL_PARENTHESIS_OPEN(B) LSL_TYPE_KEY(C) LSL_PARENTHESIS_CLOSE(D). { A = addTypecast(B, C, D); }
62expr(A) ::= LSL_PARENTHESIS_OPEN(B) LSL_TYPE_LIST(C) LSL_PARENTHESIS_CLOSE(D). { A = addTypecast(B, C, D); }
63expr(A) ::= LSL_PARENTHESIS_OPEN(B) LSL_TYPE_ROTATION(C) LSL_PARENTHESIS_CLOSE(D). { A = addTypecast(B, C, D); }
64expr(A) ::= LSL_PARENTHESIS_OPEN(B) LSL_TYPE_STRING(C) LSL_PARENTHESIS_CLOSE(D). { A = addTypecast(B, C, D); }
65expr(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.
63expr(A) ::= LSL_FLOAT(B). { B->basicType = OT_float; A = B; } 73expr(A) ::= LSL_FLOAT(B). { B->basicType = OT_float; A = B; }
64%nonassoc LSL_INTEGER. 74%nonassoc LSL_INTEGER.
65expr(A) ::= LSL_INTEGER(B). { B->basicType = OT_integer; A = B; } 75expr(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.
76statement(A) ::= expr(B) LSL_STATEMENT(D). { A = addStatement(D, LSL_EXPRESSION, B); } 87statement(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
79script ::= script statement(A). { A->left = param->ast; param->ast = A; } 90script ::= script statement(A). { A->left = param->ast; param->ast = A; }
80script ::= statement(A). { A->left = param->ast; param->ast = A; } 91script ::= 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