aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/LuaSL/src/LuaSL_LSL_tree.c
diff options
context:
space:
mode:
authorDavid Walter Seikel2012-01-08 23:47:09 +1000
committerDavid Walter Seikel2012-01-08 23:47:09 +1000
commitaa7be467e110de4d3757fc7e0697d89f397aea34 (patch)
tree73dc6df5109837780a20ff45486269d056b7a459 /LuaSL/src/LuaSL_LSL_tree.c
parentBite the bullet and get rid of my dreams to use enums, yacc insists on #defines. (diff)
downloadSledjHamr-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.c133
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
14LSL_Token LSL_Tokens[] = 14LSL_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