diff options
author | David Walter Seikel | 2012-01-08 23:47:09 +1000 |
---|---|---|
committer | David Walter Seikel | 2012-01-08 23:47:09 +1000 |
commit | aa7be467e110de4d3757fc7e0697d89f397aea34 (patch) | |
tree | 73dc6df5109837780a20ff45486269d056b7a459 /LuaSL/src/LuaSL_LSL_tree.c | |
parent | Bite the bullet and get rid of my dreams to use enums, yacc insists on #defines. (diff) | |
download | SledjHamr-aa7be467e110de4d3757fc7e0697d89f397aea34.zip SledjHamr-aa7be467e110de4d3757fc7e0697d89f397aea34.tar.gz SledjHamr-aa7be467e110de4d3757fc7e0697d89f397aea34.tar.bz2 SledjHamr-aa7be467e110de4d3757fc7e0697d89f397aea34.tar.xz |
Rearrange everything, to be consistant order.
Diffstat (limited to 'LuaSL/src/LuaSL_LSL_tree.c')
-rw-r--r-- | LuaSL/src/LuaSL_LSL_tree.c | 133 |
1 files changed, 71 insertions, 62 deletions
diff --git a/LuaSL/src/LuaSL_LSL_tree.c b/LuaSL/src/LuaSL_LSL_tree.c index 11a481d..9f663e5 100644 --- a/LuaSL/src/LuaSL_LSL_tree.c +++ b/LuaSL/src/LuaSL_LSL_tree.c | |||
@@ -13,94 +13,103 @@ static void outputStatementToken(LSL_Leaf *content); | |||
13 | 13 | ||
14 | LSL_Token LSL_Tokens[] = | 14 | LSL_Token LSL_Tokens[] = |
15 | { | 15 | { |
16 | // Start with expression operators. | 16 | // {LSL_COMMENT, "/*", LSL_NONE, NULL, NULL, NULL}, |
17 | // In order of precedence, high to low. | 17 | // {LSL_COMMENT_LINE, "//", LSL_NONE, NULL, NULL, NULL}, |
18 | {LSL_SPACE, " ", LSL_NONE, NULL, NULL, NULL}, | ||
19 | |||
20 | // Operators, in order of precedence, low to high | ||
18 | // Left to right, unless oterwise stated. | 21 | // Left to right, unless oterwise stated. |
19 | // According to http://wiki.secondlife.com/wiki/Category:LSL_Operators | 22 | // According to http://wiki.secondlife.com/wiki/Category:LSL_Operators |
20 | 23 | ||
21 | // {LSL_COMMA, ",", LSL_LEFT2RIGHT, outputOperationToken, NULL, evaluateOperationToken}, | 24 | {LSL_BOOL_AND, "&&", LSL_LEFT2RIGHT, outputOperationToken, NULL, evaluateOperationToken}, |
22 | // {LSL_INCREMENT_PRE, "++", LSL_RIGHT2LEFT | LSL_UNARY, outputOperationToken, NULL, evaluateOperationToken}, | ||
23 | // {LSL_INCREMENT_POST, "++", LSL_RIGHT2LEFT | LSL_UNARY, outputOperationToken, NULL, evaluateOperationToken}, | ||
24 | // {LSL_DECREMENT_PRE, "--", LSL_RIGHT2LEFT | LSL_UNARY, outputOperationToken, NULL, evaluateOperationToken}, | ||
25 | // {LSL_DECREMENT_POST, "--", LSL_RIGHT2LEFT | LSL_UNARY, outputOperationToken, NULL, evaluateOperationToken}, | ||
26 | // {LSL_DOT, ".", LSL_RIGHT2LEFT, outputOperationToken, NULL, evaluateOperationToken}, | ||
27 | // {LSL_ASSIGNMENT_PLAIN, "=", LSL_RIGHT2LEFT | LSL_ASSIGNMENT, outputOperationToken, NULL, evaluateOperationToken}, | ||
28 | // {LSL_ASSIGNMENT_DIVIDE, "/=", LSL_RIGHT2LEFT | LSL_ASSIGNMENT, outputOperationToken, NULL, evaluateOperationToken}, | ||
29 | // {LSL_ASSIGNMENT_MODULO, "%=", LSL_RIGHT2LEFT | LSL_ASSIGNMENT, outputOperationToken, NULL, evaluateOperationToken}, | ||
30 | // {LSL_ASSIGNMENT_MULTIPLY, "*=", LSL_RIGHT2LEFT | LSL_ASSIGNMENT, outputOperationToken, NULL, evaluateOperationToken}, | ||
31 | // {LSL_ASSIGNMENT_SUBTRACT, "-=", LSL_RIGHT2LEFT | LSL_ASSIGNMENT, outputOperationToken, NULL, evaluateOperationToken}, | ||
32 | // {LSL_ASSIGNMENT_ADD, "+=", LSL_RIGHT2LEFT | LSL_ASSIGNMENT, outputOperationToken, NULL, evaluateOperationToken}, | ||
33 | // {LSL_ASSIGNMENT_CONCATENATE, "+=", LSL_RIGHT2LEFT | LSL_ASSIGNMENT, outputOperationToken, NULL, evaluateOperationToken}, | ||
34 | {LSL_PARENTHESIS_OPEN, "(", LSL_INNER2OUTER, NULL, NULL, NULL}, | ||
35 | {LSL_PARENTHESIS_CLOSE, ")", LSL_INNER2OUTER, NULL, NULL, evaluateNoToken}, | ||
36 | // {LSL_BRACKET_OPEN, "[", LSL_INNER2OUTER | LSL_CREATION, outputOperationToken, NULL, evaluateOperationToken}, | ||
37 | // {LSL_BRACKET_CLOSE, "]", LSL_INNER2OUTER | LSL_CREATION, outputOperationToken, NULL, evaluateOperationToken}, | ||
38 | // {LSL_ANGLE_OPEN, "<", LSL_LEFT2RIGHT | LSL_CREATION, outputOperationToken, NULL, evaluateOperationToken}, | ||
39 | // {LSL_ANGLE_CLOSE, ">", LSL_LEFT2RIGHT | LSL_CREATION, outputOperationToken, NULL, evaluateOperationToken}, | ||
40 | // {LSL_TYPECAST_OPEN, "(", LSL_RIGHT2LEFT | LSL_UNARY, outputOperationToken, NULL, evaluateOperationToken}, | ||
41 | // {LSL_TYPECAST_CLOSE, ")", LSL_RIGHT2LEFT | LSL_UNARY, outputOperationToken, NULL, evaluateOperationToken}, | ||
42 | {LSL_BIT_NOT, "~", LSL_RIGHT2LEFT | LSL_UNARY, outputOperationToken, NULL, evaluateOperationToken}, | ||
43 | {LSL_BOOL_NOT, "!", LSL_RIGHT2LEFT | LSL_UNARY, outputOperationToken, NULL, evaluateOperationToken}, | ||
44 | {LSL_NEGATION, "-", LSL_RIGHT2LEFT | LSL_UNARY, outputOperationToken, NULL, evaluateOperationToken}, | ||
45 | {LSL_DIVIDE, "/", LSL_LEFT2RIGHT, outputOperationToken, NULL, evaluateOperationToken}, | ||
46 | {LSL_MODULO, "%", LSL_LEFT2RIGHT, outputOperationToken, NULL, evaluateOperationToken}, | ||
47 | {LSL_MULTIPLY, "*", LSL_LEFT2RIGHT, outputOperationToken, NULL, evaluateOperationToken}, | ||
48 | // {LSL_DOT_PRODUCT, "*", LSL_LEFT2RIGHT, outputOperationToken, NULL, evaluateOperationToken}, | ||
49 | // {LSL_CROSS_PRODUCT, "%", LSL_LEFT2RIGHT, outputOperationToken, NULL, evaluateOperationToken}, | ||
50 | {LSL_SUBTRACT, "-", LSL_LEFT2RIGHT, outputOperationToken, NULL, evaluateOperationToken}, | ||
51 | {LSL_ADD, "+", LSL_LEFT2RIGHT, outputOperationToken, NULL, evaluateOperationToken}, | ||
52 | // {LSL_CONCATENATE, "+", LSL_LEFT2RIGHT, outputOperationToken, NULL, evaluateOperationToken}, | ||
53 | {LSL_LEFT_SHIFT, "<<", LSL_LEFT2RIGHT, outputOperationToken, NULL, evaluateOperationToken}, | ||
54 | {LSL_RIGHT_SHIFT, ">>", LSL_LEFT2RIGHT, outputOperationToken, NULL, evaluateOperationToken}, | ||
55 | // QUIRK - Conditionals are executed right to left. Or left to right, depending on who you ask. lol | ||
56 | {LSL_LESS_THAN, "<", LSL_LEFT2RIGHT, outputOperationToken, NULL, evaluateOperationToken}, | ||
57 | {LSL_GREATER_THAN, ">", LSL_LEFT2RIGHT, outputOperationToken, NULL, evaluateOperationToken}, | ||
58 | {LSL_LESS_EQUAL, "<=", LSL_LEFT2RIGHT, outputOperationToken, NULL, evaluateOperationToken}, | ||
59 | {LSL_GREATER_EQUAL, ">=", LSL_LEFT2RIGHT, outputOperationToken, NULL, evaluateOperationToken}, | ||
60 | {LSL_EQUAL, "==", LSL_LEFT2RIGHT, outputOperationToken, NULL, evaluateOperationToken}, | ||
61 | {LSL_NOT_EQUAL, "!=", LSL_LEFT2RIGHT, outputOperationToken, NULL, evaluateOperationToken}, | ||
62 | {LSL_BIT_AND, "&", LSL_LEFT2RIGHT, outputOperationToken, NULL, evaluateOperationToken}, | ||
63 | {LSL_BIT_XOR, "^", LSL_LEFT2RIGHT, outputOperationToken, NULL, evaluateOperationToken}, | ||
64 | {LSL_BIT_OR, "|", LSL_LEFT2RIGHT, outputOperationToken, NULL, evaluateOperationToken}, | ||
65 | // QUIRK - Seems to be some disagreement about BOOL_AND/BOOL_OR precedence. Either they are equal, or OR is higher. | 25 | // QUIRK - Seems to be some disagreement about BOOL_AND/BOOL_OR precedence. Either they are equal, or OR is higher. |
66 | // QUIRK - No boolean short circuiting. | 26 | // QUIRK - No boolean short circuiting. |
67 | {LSL_BOOL_OR, "||", LSL_LEFT2RIGHT, outputOperationToken, NULL, evaluateOperationToken}, | 27 | {LSL_BOOL_OR, "||", LSL_LEFT2RIGHT, outputOperationToken, NULL, evaluateOperationToken}, |
68 | {LSL_BOOL_AND, "&&", LSL_LEFT2RIGHT, outputOperationToken, NULL, evaluateOperationToken}, | 28 | {LSL_BIT_OR, "|", LSL_LEFT2RIGHT, outputOperationToken, NULL, evaluateOperationToken}, |
29 | {LSL_BIT_XOR, "^", LSL_LEFT2RIGHT, outputOperationToken, NULL, evaluateOperationToken}, | ||
30 | {LSL_BIT_AND, "&", LSL_LEFT2RIGHT, outputOperationToken, NULL, evaluateOperationToken}, | ||
31 | // QUIRK - Conditionals are executed right to left. Or left to right, depending on who you ask. lol | ||
32 | {LSL_NOT_EQUAL, "!=", LSL_LEFT2RIGHT, outputOperationToken, NULL, evaluateOperationToken}, | ||
33 | {LSL_EQUAL, "==", LSL_LEFT2RIGHT, outputOperationToken, NULL, evaluateOperationToken}, | ||
34 | {LSL_GREATER_EQUAL, ">=", LSL_LEFT2RIGHT, outputOperationToken, NULL, evaluateOperationToken}, | ||
35 | {LSL_LESS_EQUAL, "<=", LSL_LEFT2RIGHT, outputOperationToken, NULL, evaluateOperationToken}, | ||
36 | {LSL_GREATER_THAN, ">", LSL_LEFT2RIGHT, outputOperationToken, NULL, evaluateOperationToken}, | ||
37 | {LSL_LESS_THAN, "<", LSL_LEFT2RIGHT, outputOperationToken, NULL, evaluateOperationToken}, | ||
38 | {LSL_RIGHT_SHIFT, ">>", LSL_LEFT2RIGHT, outputOperationToken, NULL, evaluateOperationToken}, | ||
39 | {LSL_LEFT_SHIFT, "<<", LSL_LEFT2RIGHT, outputOperationToken, NULL, evaluateOperationToken}, | ||
40 | // {LSL_CONCATENATE, "+", LSL_LEFT2RIGHT, outputOperationToken, NULL, evaluateOperationToken}, | ||
41 | {LSL_ADD, "+", LSL_LEFT2RIGHT, outputOperationToken, NULL, evaluateOperationToken}, | ||
42 | {LSL_SUBTRACT, "-", LSL_LEFT2RIGHT, outputOperationToken, NULL, evaluateOperationToken}, | ||
43 | // {LSL_CROSS_PRODUCT, "%", LSL_LEFT2RIGHT, outputOperationToken, NULL, evaluateOperationToken}, | ||
44 | // {LSL_DOT_PRODUCT, "*", LSL_LEFT2RIGHT, outputOperationToken, NULL, evaluateOperationToken}, | ||
45 | {LSL_MULTIPLY, "*", LSL_LEFT2RIGHT, outputOperationToken, NULL, evaluateOperationToken}, | ||
46 | {LSL_MODULO, "%", LSL_LEFT2RIGHT, outputOperationToken, NULL, evaluateOperationToken}, | ||
47 | {LSL_DIVIDE, "/", LSL_LEFT2RIGHT, outputOperationToken, NULL, evaluateOperationToken}, | ||
48 | {LSL_NEGATION, "-", LSL_RIGHT2LEFT | LSL_UNARY, outputOperationToken, NULL, evaluateOperationToken}, | ||
49 | {LSL_BOOL_NOT, "!", LSL_RIGHT2LEFT | LSL_UNARY, outputOperationToken, NULL, evaluateOperationToken}, | ||
50 | {LSL_BIT_NOT, "~", LSL_RIGHT2LEFT | LSL_UNARY, outputOperationToken, NULL, evaluateOperationToken}, | ||
51 | // {LSL_TYPECAST_CLOSE, ")", LSL_RIGHT2LEFT | LSL_UNARY, outputOperationToken, NULL, evaluateOperationToken}, | ||
52 | // {LSL_TYPECAST_OPEN, "(", LSL_RIGHT2LEFT | LSL_UNARY, outputOperationToken, NULL, evaluateOperationToken}, | ||
53 | // {LSL_ANGLE_CLOSE, ">", LSL_LEFT2RIGHT | LSL_CREATION, outputOperationToken, NULL, evaluateOperationToken}, | ||
54 | // {LSL_ANGLE_OPEN, "<", LSL_LEFT2RIGHT | LSL_CREATION, outputOperationToken, NULL, evaluateOperationToken}, | ||
55 | // {LSL_BRACKET_CLOSE, "]", LSL_INNER2OUTER | LSL_CREATION, outputOperationToken, NULL, evaluateOperationToken}, | ||
56 | // {LSL_BRACKET_OPEN, "[", LSL_INNER2OUTER | LSL_CREATION, outputOperationToken, NULL, evaluateOperationToken}, | ||
57 | {LSL_PARENTHESIS_CLOSE, ")", LSL_INNER2OUTER, NULL, NULL, evaluateNoToken}, | ||
58 | {LSL_PARENTHESIS_OPEN, "(", LSL_INNER2OUTER, NULL, NULL, NULL}, | ||
59 | // {LSL_ASSIGNMENT_CONCATENATE, "+=", LSL_RIGHT2LEFT | LSL_ASSIGNMENT, outputOperationToken, NULL, evaluateOperationToken}, | ||
60 | // {LSL_ASSIGNMENT_ADD, "+=", LSL_RIGHT2LEFT | LSL_ASSIGNMENT, outputOperationToken, NULL, evaluateOperationToken}, | ||
61 | // {LSL_ASSIGNMENT_SUBTRACT, "-=", LSL_RIGHT2LEFT | LSL_ASSIGNMENT, outputOperationToken, NULL, evaluateOperationToken}, | ||
62 | // {LSL_ASSIGNMENT_MULTIPLY, "*=", LSL_RIGHT2LEFT | LSL_ASSIGNMENT, outputOperationToken, NULL, evaluateOperationToken}, | ||
63 | // {LSL_ASSIGNMENT_MODULO, "%=", LSL_RIGHT2LEFT | LSL_ASSIGNMENT, outputOperationToken, NULL, evaluateOperationToken}, | ||
64 | // {LSL_ASSIGNMENT_DIVIDE, "/=", LSL_RIGHT2LEFT | LSL_ASSIGNMENT, outputOperationToken, NULL, evaluateOperationToken}, | ||
65 | // {LSL_ASSIGNMENT_PLAIN, "=", LSL_RIGHT2LEFT | LSL_ASSIGNMENT, outputOperationToken, NULL, evaluateOperationToken}, | ||
66 | // {LSL_DOT, ".", LSL_RIGHT2LEFT, outputOperationToken, NULL, evaluateOperationToken}, | ||
67 | // {LSL_DECREMENT_POST, "--", LSL_RIGHT2LEFT | LSL_UNARY, outputOperationToken, NULL, evaluateOperationToken}, | ||
68 | // {LSL_DECREMENT_PRE, "--", LSL_RIGHT2LEFT | LSL_UNARY, outputOperationToken, NULL, evaluateOperationToken}, | ||
69 | // {LSL_INCREMENT_POST, "++", LSL_RIGHT2LEFT | LSL_UNARY, outputOperationToken, NULL, evaluateOperationToken}, | ||
70 | // {LSL_INCREMENT_PRE, "++", LSL_RIGHT2LEFT | LSL_UNARY, outputOperationToken, NULL, evaluateOperationToken}, | ||
71 | // {LSL_COMMA, ",", LSL_LEFT2RIGHT, outputOperationToken, NULL, evaluateOperationToken}, | ||
69 | 72 | ||
70 | // Then the rest of the syntax tokens. | 73 | {LSL_EXPRESSION, "expression", LSL_NONE, NULL, NULL, NULL}, |
74 | |||
75 | // Types. | ||
71 | 76 | ||
72 | {LSL_SPACE, " ", LSL_NONE, NULL, NULL, NULL}, | ||
73 | // {LSL_COMMENT_LINE, "//", LSL_NONE, NULL, NULL, NULL}, | ||
74 | // {LSL_COMMENT, "/*", LSL_NONE, NULL, NULL, NULL}, | ||
75 | // {LSL_TYPE, "type", LSL_NONE, NULL, NULL, NULL}, | ||
76 | // {LSL_NAME, "name", LSL_NONE, NULL, NULL, NULL}, | ||
77 | // {LSL_IDENTIFIER, "identifier", LSL_NONE, NULL, NULL, NULL}, | ||
78 | // {LSL_FLOAT, "float", LSL_NONE, NULL, NULL, NULL}, | 77 | // {LSL_FLOAT, "float", LSL_NONE, NULL, NULL, NULL}, |
79 | {LSL_INTEGER, "integer", LSL_NONE, outputIntegerToken, NULL, evaluateIntegerToken}, | 78 | {LSL_INTEGER, "integer", LSL_NONE, outputIntegerToken, NULL, evaluateIntegerToken}, |
80 | // {LSL_STRING, "string", LSL_NONE, NULL, NULL, NULL}, | ||
81 | // {LSL_KEY, "key", LSL_NONE, NULL, NULL, NULL}, | 79 | // {LSL_KEY, "key", LSL_NONE, NULL, NULL, NULL}, |
82 | // {LSL_VECTOR, "vector", LSL_NONE, NULL, NULL, NULL}, | ||
83 | // {LSL_ROTATION, "rotation", LSL_NONE, NULL, NULL, NULL}, | ||
84 | // {LSL_LIST, "list", LSL_NONE, NULL, NULL, NULL}, | 80 | // {LSL_LIST, "list", LSL_NONE, NULL, NULL, NULL}, |
81 | // {LSL_ROTATION, "rotation", LSL_NONE, NULL, NULL, NULL}, | ||
82 | // {LSL_STRING, "string", LSL_NONE, NULL, NULL, NULL}, | ||
83 | // {LSL_VECTOR, "vector", LSL_NONE, NULL, NULL, NULL}, | ||
84 | |||
85 | // Then the rest of the syntax tokens. | ||
86 | |||
87 | // {LSL_IDENTIFIER, "identifier", LSL_NONE, NULL, NULL, NULL}, | ||
88 | |||
85 | // {LSL_LABEL, "@", LSL_NONE, NULL, NULL, NULL}, | 89 | // {LSL_LABEL, "@", LSL_NONE, NULL, NULL, NULL}, |
86 | {LSL_EXPRESSION, "expression", LSL_NONE, NULL, NULL, NULL}, | 90 | |
87 | // {LSL_DO, "do", LSL_NONE, NULL, NULL, NULL}, | 91 | // {LSL_DO, "do", LSL_NONE, NULL, NULL, NULL}, |
88 | // {LSL_FOR, "for", LSL_NONE, NULL, NULL, NULL}, | 92 | // {LSL_FOR, "for", LSL_NONE, NULL, NULL, NULL}, |
89 | // {LSL_IF, "if", LSL_NONE, NULL, NULL, NULL}, | ||
90 | // {LSL_ELSE, "else", LSL_NONE, NULL, NULL, NULL}, | ||
91 | // {LSL_ELSE_IF, "else if", LSL_NONE, NULL, NULL, NULL}, | 93 | // {LSL_ELSE_IF, "else if", LSL_NONE, NULL, NULL, NULL}, |
94 | // {LSL_ELSE, "else", LSL_NONE, NULL, NULL, NULL}, | ||
95 | // {LSL_IF, "if", LSL_NONE, NULL, NULL, NULL}, | ||
92 | // {LSL_JUMP, "jump", LSL_NONE, NULL, NULL, NULL}, | 96 | // {LSL_JUMP, "jump", LSL_NONE, NULL, NULL, NULL}, |
97 | // {LSL_RETURN, "return", LSL_NONE, NULL, NULL, NULL}, | ||
93 | // {LSL_STATE_CHANGE, "state", LSL_NONE, NULL, NULL, NULL}, | 98 | // {LSL_STATE_CHANGE, "state", LSL_NONE, NULL, NULL, NULL}, |
94 | // {LSL_WHILE, "while", LSL_NONE, NULL, NULL, NULL}, | 99 | // {LSL_WHILE, "while", LSL_NONE, NULL, NULL, NULL}, |
95 | // {LSL_RETURN, "return", LSL_NONE, NULL, NULL, NULL}, | ||
96 | {LSL_STATEMENT, ";", LSL_NONE, outputStatementToken, NULL, evaluateStatementToken}, | 100 | {LSL_STATEMENT, ";", LSL_NONE, outputStatementToken, NULL, evaluateStatementToken}, |
97 | // {LSL_BLOCK_OPEN, "{", LSL_NONE, NULL, NULL, NULL}, | 101 | |
98 | // {LSL_BLOCK_CLOSE, "}", LSL_NONE, NULL, NULL, NULL}, | 102 | // {LSL_BLOCK_CLOSE, "}", LSL_NONE, NULL, NULL, NULL}, |
103 | // {LSL_BLOCK_OPEN, "{", LSL_NONE, NULL, NULL, NULL}, | ||
99 | // {LSL_PARAMETER, "parameter", LSL_NONE, NULL, NULL, NULL}, | 104 | // {LSL_PARAMETER, "parameter", LSL_NONE, NULL, NULL, NULL}, |
100 | // {LSL_FUNCTION, "function", LSL_NONE, NULL, NULL, NULL}, | 105 | // {LSL_FUNCTION, "function", LSL_NONE, NULL, NULL, NULL}, |
101 | // {LSL_STATE, "state", LSL_NONE, NULL, NULL, NULL}, | 106 | // {LSL_STATE, "state", LSL_NONE, NULL, NULL, NULL}, |
102 | // {LSL_SCRIPT, "script", LSL_NONE, NULL, NULL, NULL}, | 107 | // {LSL_SCRIPT, "script", LSL_NONE, NULL, NULL, NULL}, |
108 | |||
103 | // {LSL_UNKNOWN, "unknown", LSL_NONE, NULL, NULL, NULL}, | 109 | // {LSL_UNKNOWN, "unknown", LSL_NONE, NULL, NULL, NULL}, |
110 | |||
111 | // A sentinal. | ||
112 | |||
104 | {999999, NULL, LSL_NONE, NULL, NULL, NULL} | 113 | {999999, NULL, LSL_NONE, NULL, NULL, NULL} |
105 | }; | 114 | }; |
106 | 115 | ||