annotate node.h @ 2:ff5e493bc9cb default tip

2003-01-29
author Radomir Dopieralski <sheep-devel@sheep.art.pl>
date Sat, 13 Oct 2012 21:14:50 +0200
parents
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
2
ff5e493bc9cb 2003-01-29
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
1 /* Wezły drzewa parsowania. */
ff5e493bc9cb 2003-01-29
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
2 /* Konstruktory są w plikach node_new.* */
ff5e493bc9cb 2003-01-29
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
3
ff5e493bc9cb 2003-01-29
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
4 #ifndef NODE_H
ff5e493bc9cb 2003-01-29
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
5 #define NODE_H
ff5e493bc9cb 2003-01-29
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
6
ff5e493bc9cb 2003-01-29
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
7 #include <glib.h>
ff5e493bc9cb 2003-01-29
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
8 #include "symbols.h"
ff5e493bc9cb 2003-01-29
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
9
ff5e493bc9cb 2003-01-29
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
10 /* Zeby oszczedzic sobie pisania. */
ff5e493bc9cb 2003-01-29
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
11 typedef struct StmtNode StmtNode;
ff5e493bc9cb 2003-01-29
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
12 typedef struct SymbolNode SymbolNode;
ff5e493bc9cb 2003-01-29
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
13 typedef struct ExprNode ExprNode;
ff5e493bc9cb 2003-01-29
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
14
ff5e493bc9cb 2003-01-29
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
15 enum NodeKind {
ff5e493bc9cb 2003-01-29
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
16 /* Rodzaje symboli. */
ff5e493bc9cb 2003-01-29
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
17 NODE_NONE,
ff5e493bc9cb 2003-01-29
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
18 SYM_TYPE_POINTER,
ff5e493bc9cb 2003-01-29
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
19 SYM_TYPE_STRING,
ff5e493bc9cb 2003-01-29
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
20 SYM_TYPE_ARRAY,
ff5e493bc9cb 2003-01-29
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
21 SYM_TYPE_SET,
ff5e493bc9cb 2003-01-29
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
22 SYM_TYPE_SUBRANGE,
ff5e493bc9cb 2003-01-29
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
23 SYM_TYPE_ENUM,
ff5e493bc9cb 2003-01-29
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
24 SYM_TYPE_RECORD,
ff5e493bc9cb 2003-01-29
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
25 SYM_TYPE_FILE,
ff5e493bc9cb 2003-01-29
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
26 SYM_TYPE_MAXIMUM,
ff5e493bc9cb 2003-01-29
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
27 SYM_VAR_LOCAL,
ff5e493bc9cb 2003-01-29
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
28 SYM_VAR_PARAM,
ff5e493bc9cb 2003-01-29
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
29 SYM_VAR_VARPARAM,
ff5e493bc9cb 2003-01-29
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
30 SYM_VAR_FIELD,
ff5e493bc9cb 2003-01-29
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
31 SYM_VAR_DEARR,
ff5e493bc9cb 2003-01-29
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
32 SYM_VAR_DEREF,
ff5e493bc9cb 2003-01-29
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
33 SYM_VAR_CAST,
ff5e493bc9cb 2003-01-29
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
34 SYM_VAR_MAXIMUM,
ff5e493bc9cb 2003-01-29
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
35 SYM_LABEL,
ff5e493bc9cb 2003-01-29
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
36 SYM_PROC,
ff5e493bc9cb 2003-01-29
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
37 SYM_FUNC,
ff5e493bc9cb 2003-01-29
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
38 SYM_CONST,
ff5e493bc9cb 2003-01-29
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
39 SYM_UNIT,
ff5e493bc9cb 2003-01-29
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
40 SYM_PROG,
ff5e493bc9cb 2003-01-29
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
41 SYM_TAG_FIELD, /* pole wariantowe w zmiennej rekordowej. */
ff5e493bc9cb 2003-01-29
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
42 SYM_MAXIMUM,
ff5e493bc9cb 2003-01-29
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
43 /* Rodzaje rozkazów */
ff5e493bc9cb 2003-01-29
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
44 STMT_BLOCK,
ff5e493bc9cb 2003-01-29
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
45 STMT_IF,
ff5e493bc9cb 2003-01-29
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
46 STMT_WHILE,
ff5e493bc9cb 2003-01-29
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
47 STMT_REPEAT,
ff5e493bc9cb 2003-01-29
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
48 STMT_FOR,
ff5e493bc9cb 2003-01-29
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
49 STMT_FOR_DOWN,
ff5e493bc9cb 2003-01-29
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
50 STMT_WITH,
ff5e493bc9cb 2003-01-29
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
51 STMT_PROC,
ff5e493bc9cb 2003-01-29
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
52 STMT_ASSIGN,
ff5e493bc9cb 2003-01-29
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
53 STMT_GOTO,
ff5e493bc9cb 2003-01-29
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
54 STMT_CASE_HEAD,
ff5e493bc9cb 2003-01-29
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
55 STMT_CASE_CASE,
ff5e493bc9cb 2003-01-29
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
56 STMT_MAXIMUM,
ff5e493bc9cb 2003-01-29
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
57 /* Rodzaje wyrażeń */
ff5e493bc9cb 2003-01-29
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
58 EXPR_VAR, /* wywołanie zmiennej */
ff5e493bc9cb 2003-01-29
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
59 EXPR_CONST, /* wywołanie stałej */
ff5e493bc9cb 2003-01-29
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
60 EXPR_PAREN, /* nawiasy */
ff5e493bc9cb 2003-01-29
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
61 EXPR_FUNC, /* wywolanie funkcji */
ff5e493bc9cb 2003-01-29
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
62 EXPR_STRING, /* stała tekstowa */
ff5e493bc9cb 2003-01-29
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
63 EXPR_NUMBER, /* stała liczbowa */
ff5e493bc9cb 2003-01-29
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
64 EXPR_UN, /* operator unarny */
ff5e493bc9cb 2003-01-29
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
65 EXPR_BIN, /* operator binarny -- działanie*/
ff5e493bc9cb 2003-01-29
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
66 EXPR_EQ, /* operator binarny -- porównanie*/
ff5e493bc9cb 2003-01-29
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
67 EXPR_NIL, /* Stała NIL */
ff5e493bc9cb 2003-01-29
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
68 EXPR_ADDR, /* Adres zmiennej @zmienna lub expr:expr*/
ff5e493bc9cb 2003-01-29
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
69 EXPR_RANGE, /* Zakres z operatorem `..' */
ff5e493bc9cb 2003-01-29
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
70 EXPR_ARRAY,
ff5e493bc9cb 2003-01-29
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
71 EXPR_RECORD,
ff5e493bc9cb 2003-01-29
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
72 EXPR_CASES, /* Lista przypadków */
ff5e493bc9cb 2003-01-29
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
73 EXPR_VARIANT, /* Record variant */
ff5e493bc9cb 2003-01-29
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
74 EXPR_SET,
ff5e493bc9cb 2003-01-29
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
75 EXPR_MAXIMUM,
ff5e493bc9cb 2003-01-29
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
76 NODE_MAXIMUM
ff5e493bc9cb 2003-01-29
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
77 };
ff5e493bc9cb 2003-01-29
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
78
ff5e493bc9cb 2003-01-29
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
79 /* Rodzaje operatorów. */
ff5e493bc9cb 2003-01-29
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
80 enum OperKind {
ff5e493bc9cb 2003-01-29
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
81 OPER_NONE,
ff5e493bc9cb 2003-01-29
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
82 OPER_PLUS,
ff5e493bc9cb 2003-01-29
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
83 OPER_MINUS,
ff5e493bc9cb 2003-01-29
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
84 OPER_STAR,
ff5e493bc9cb 2003-01-29
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
85 OPER_SLASH,
ff5e493bc9cb 2003-01-29
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
86 OPER_DIV,
ff5e493bc9cb 2003-01-29
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
87 OPER_MOD,
ff5e493bc9cb 2003-01-29
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
88 OPER_SHL,
ff5e493bc9cb 2003-01-29
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
89 OPER_SHR,
ff5e493bc9cb 2003-01-29
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
90 OPER_EQ,
ff5e493bc9cb 2003-01-29
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
91 OPER_NEQ,
ff5e493bc9cb 2003-01-29
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
92 OPER_GT,
ff5e493bc9cb 2003-01-29
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
93 OPER_LT,
ff5e493bc9cb 2003-01-29
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
94 OPER_GEQ,
ff5e493bc9cb 2003-01-29
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
95 OPER_LEQ,
ff5e493bc9cb 2003-01-29
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
96 OPER_IN,
ff5e493bc9cb 2003-01-29
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
97 OPER_XOR,
ff5e493bc9cb 2003-01-29
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
98 OPER_OR,
ff5e493bc9cb 2003-01-29
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
99 OPER_AND,
ff5e493bc9cb 2003-01-29
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
100 OPER_NOT
ff5e493bc9cb 2003-01-29
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
101 };
ff5e493bc9cb 2003-01-29
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
102
ff5e493bc9cb 2003-01-29
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
103 /* Dowolny węzeł. */
ff5e493bc9cb 2003-01-29
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
104 union AnyNode {
ff5e493bc9cb 2003-01-29
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
105 SymbolNode *symbol;
ff5e493bc9cb 2003-01-29
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
106 StmtNode *stmt;
ff5e493bc9cb 2003-01-29
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
107 ExprNode *expr;
ff5e493bc9cb 2003-01-29
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
108 };
ff5e493bc9cb 2003-01-29
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
109 typedef union AnyNode AnyNode;
ff5e493bc9cb 2003-01-29
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
110
ff5e493bc9cb 2003-01-29
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
111 /* Wyrażenie. */
ff5e493bc9cb 2003-01-29
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
112 struct ExprNode {
ff5e493bc9cb 2003-01-29
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
113 /* Rodzaj wyrażenia. */
ff5e493bc9cb 2003-01-29
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
114 enum NodeKind kind;
ff5e493bc9cb 2003-01-29
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
115
ff5e493bc9cb 2003-01-29
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
116 /* Dla operatorów -- pierwszy parametr;
ff5e493bc9cb 2003-01-29
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
117 * Dla zakresów -- początek zakresu;
ff5e493bc9cb 2003-01-29
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
118 * Dla adresu -- segment pamięci;
ff5e493bc9cb 2003-01-29
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
119 */
ff5e493bc9cb 2003-01-29
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
120 struct ExprNode *expr;
ff5e493bc9cb 2003-01-29
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
121 /* Dla operatorów binarnych -- drugi parametr;
ff5e493bc9cb 2003-01-29
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
122 * Dla zakresów -- koniec zakresu;
ff5e493bc9cb 2003-01-29
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
123 * Dla adresu -- offset pamięci;
ff5e493bc9cb 2003-01-29
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
124 */
ff5e493bc9cb 2003-01-29
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
125 struct ExprNode *expr2;
ff5e493bc9cb 2003-01-29
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
126 /* Dla operatorów -- rodzaj operatora. */
ff5e493bc9cb 2003-01-29
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
127 enum OperKind oper;
ff5e493bc9cb 2003-01-29
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
128 /* Dla wywołania zmiennej, funkcji lub stałej -- dany symbol;
ff5e493bc9cb 2003-01-29
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
129 * Dla adresu -- obiekt o tym samym adresie;
ff5e493bc9cb 2003-01-29
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
130 */
ff5e493bc9cb 2003-01-29
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
131 SymbolNode *symbol;
ff5e493bc9cb 2003-01-29
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
132 /* Dla wywołania procedury -- lista parametrów;
ff5e493bc9cb 2003-01-29
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
133 * Dla stałej zbiorowej -- lista wyrażeń elementów;
ff5e493bc9cb 2003-01-29
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
134 * Dla stałej tablicowej -- jw.;
ff5e493bc9cb 2003-01-29
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
135 * Dla stałej rekordowej -- lista wyrażeń pÓl;
ff5e493bc9cb 2003-01-29
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
136 */
ff5e493bc9cb 2003-01-29
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
137 GList *list;
ff5e493bc9cb 2003-01-29
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
138 /* Dla stałych -- ich wartość.
ff5e493bc9cb 2003-01-29
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
139 * Dla pola rekordu -- jego nazwa.
ff5e493bc9cb 2003-01-29
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
140 */
ff5e493bc9cb 2003-01-29
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
141 GString *value;
ff5e493bc9cb 2003-01-29
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
142
ff5e493bc9cb 2003-01-29
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
143 /* Komentarze. */
ff5e493bc9cb 2003-01-29
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
144 GString *bcomm;
ff5e493bc9cb 2003-01-29
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
145 GString *ccomm;
ff5e493bc9cb 2003-01-29
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
146 };
ff5e493bc9cb 2003-01-29
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
147
ff5e493bc9cb 2003-01-29
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
148 /* Symbol. */
ff5e493bc9cb 2003-01-29
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
149 struct SymbolNode {
ff5e493bc9cb 2003-01-29
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
150 /* Rodzaj symbolu. */
ff5e493bc9cb 2003-01-29
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
151 enum NodeKind kind;
ff5e493bc9cb 2003-01-29
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
152 /* Numer zwracany przez tokenizer. */
ff5e493bc9cb 2003-01-29
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
153 int token;
ff5e493bc9cb 2003-01-29
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
154 /* Oryginalna nazwa symbolu (z zachowaniem wielkości liter). */
ff5e493bc9cb 2003-01-29
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
155 GString *name;
ff5e493bc9cb 2003-01-29
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
156
ff5e493bc9cb 2003-01-29
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
157 /* Dla programu, procedur i funckji -- tablica symboli zdefiniowanych wewnątrz;
ff5e493bc9cb 2003-01-29
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
158 * Dla typu rekordowego -- tablica pól rekordu;
ff5e493bc9cb 2003-01-29
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
159 */
ff5e493bc9cb 2003-01-29
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
160 Namespace *symbols;
ff5e493bc9cb 2003-01-29
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
161 /* Dla programu, procedury i funkcji -- ciało (polecenie blokowe);
ff5e493bc9cb 2003-01-29
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
162 * Dla etykiety -- polecenie, którego dotyczy;
ff5e493bc9cb 2003-01-29
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
163 */
ff5e493bc9cb 2003-01-29
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
164 StmtNode *stmt;
ff5e493bc9cb 2003-01-29
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
165 /* Dla zmiennych, stałych i funkcji -- typ;
ff5e493bc9cb 2003-01-29
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
166 * Dla typów -- typ bazowy;
ff5e493bc9cb 2003-01-29
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
167 * Dla rzutowania -- nowy typ;
ff5e493bc9cb 2003-01-29
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
168 * Dla rekordów -- typ wyróżnikowy wariantów;
ff5e493bc9cb 2003-01-29
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
169 */
ff5e493bc9cb 2003-01-29
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
170 SymbolNode *type;
ff5e493bc9cb 2003-01-29
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
171 /* Dla programu -- lista nazw parametrów;
ff5e493bc9cb 2003-01-29
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
172 * Dla procedury i funkcji -- parametry formalne;
ff5e493bc9cb 2003-01-29
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
173 * Dla typu wyliczeniowego -- stałe zdefiniowane jako jego wartości;
ff5e493bc9cb 2003-01-29
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
174 * Dla typu rekordowego -- pola wariantowe w postaci instrukcji case;
ff5e493bc9cb 2003-01-29
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
175 * Dla typu tablicowego -- lista typów indeksów;
ff5e493bc9cb 2003-01-29
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
176 * Dla elementu tablicy -- lista wyrażeń indeksów;
ff5e493bc9cb 2003-01-29
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
177 * Dla pól rekordu -- lista etykiet wyboru;
ff5e493bc9cb 2003-01-29
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
178 */
ff5e493bc9cb 2003-01-29
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
179 GList *list;
ff5e493bc9cb 2003-01-29
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
180 /* Dla dereferencji wskaźnika -- zmienna wskazywana;
ff5e493bc9cb 2003-01-29
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
181 * Dla rzutowania -- zmienna rzutowana;
ff5e493bc9cb 2003-01-29
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
182 * Dla elementu tablicy -- zmienna tablicowa;
ff5e493bc9cb 2003-01-29
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
183 * Dla rekordów -- pole wyróżnikowe;
ff5e493bc9cb 2003-01-29
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
184 */
ff5e493bc9cb 2003-01-29
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
185 SymbolNode *base;
ff5e493bc9cb 2003-01-29
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
186 /* Dla stałych -- ich wartość;
ff5e493bc9cb 2003-01-29
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
187 * Dla łańcuchów -- wielkość łańcucha;
ff5e493bc9cb 2003-01-29
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
188 * Dla typów okrojonych -- ich zakres;
ff5e493bc9cb 2003-01-29
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
189 */
ff5e493bc9cb 2003-01-29
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
190 ExprNode *expr;
ff5e493bc9cb 2003-01-29
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
191 /* Symbol do którego należy tablica symboli w której jest nasz symbol;
ff5e493bc9cb 2003-01-29
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
192 * Dla programu równa NULL;
ff5e493bc9cb 2003-01-29
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
193 */
ff5e493bc9cb 2003-01-29
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
194 SymbolNode *parent;
ff5e493bc9cb 2003-01-29
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
195
ff5e493bc9cb 2003-01-29
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
196 /* Komentarze. */
ff5e493bc9cb 2003-01-29
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
197 GString *bcomm;
ff5e493bc9cb 2003-01-29
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
198 GString *ccomm;
ff5e493bc9cb 2003-01-29
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
199 };
ff5e493bc9cb 2003-01-29
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
200
ff5e493bc9cb 2003-01-29
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
201 /* Rozkaz. */
ff5e493bc9cb 2003-01-29
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
202 struct StmtNode {
ff5e493bc9cb 2003-01-29
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
203 enum NodeKind kind; /* Rodzaj rozkazu. */
ff5e493bc9cb 2003-01-29
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
204 GList *list; /* Lista polecen dla bloku lub lista parametrow dla proc i with i
ff5e493bc9cb 2003-01-29
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
205 * goto. */
ff5e493bc9cb 2003-01-29
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
206 struct StmtNode *stmt, *stmt2; /* Polecenia wewnętrzne (stmt2 dla else) */
ff5e493bc9cb 2003-01-29
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
207 SymbolNode *symbol; /* Na jakim symbolu operuje (przypisanie, procedura) */
ff5e493bc9cb 2003-01-29
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
208 SymbolNode *label; /* Etykieta tego rozkazu. */
ff5e493bc9cb 2003-01-29
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
209 ExprNode *expr; /* Wyrażenie dla if, until, while, for */
ff5e493bc9cb 2003-01-29
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
210 ExprNode *expr2; /* drugie wyrażenie dla for */
ff5e493bc9cb 2003-01-29
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
211 StmtNode *parent;
ff5e493bc9cb 2003-01-29
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
212
ff5e493bc9cb 2003-01-29
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
213 /* Komentarze. */
ff5e493bc9cb 2003-01-29
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
214 GString *bcomm;
ff5e493bc9cb 2003-01-29
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
215 GString *ccomm;
ff5e493bc9cb 2003-01-29
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
216 };
ff5e493bc9cb 2003-01-29
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
217
ff5e493bc9cb 2003-01-29
Radomir Dopieralski <sheep-devel@sheep.art.pl>
parents:
diff changeset
218 #endif /* not NODE_H */