Skip to content

Commit 4aedb58

Browse files
committed
Added id generation for nodes and adjusted files
1 parent daa8208 commit 4aedb58

File tree

4 files changed

+106
-65
lines changed

4 files changed

+106
-65
lines changed

DiffBackend/src/abstract-sem-tree-generator.lisp

Lines changed: 26 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -13,11 +13,18 @@
1313

1414
(defparameter *current-file-ver* 1)
1515

16+
(defvar *current-id*)
17+
1618
;;; ast = abstract syntax tree
1719
(defun abstract-sem-tree-gen (ast &key (curr-file 1))
18-
(let ((*current-file-ver* curr-file))
20+
(let ((*current-file-ver* curr-file)
21+
(*current-id* 0))
1922
(top-level-rule ast)))
2023

24+
(defun get-id ()
25+
(prog1 *current-id*
26+
(incf *current-id*)))
27+
2128
(defun top-level-rule (ast)
2229
(destructuring-bind (term-type annotations &rest elements)
2330
ast
@@ -41,7 +48,9 @@
4148
(map 'vector #'match-s-expr form*-list)))
4249

4350
(defun make-lexem-wrapper (lexem)
44-
(make-instance 'lexem-wrapper-node :lexem-info lexem))
51+
(make-instance 'lexem-wrapper-node
52+
:lexem-info lexem
53+
:id (get-id)))
4554

4655
(defun match-defun (list-element)
4756
(let ((thrd (third list-element)))
@@ -51,14 +60,16 @@
5160
(destructuring-bind (type par-info keyword name parms &rest forms)
5261
list-element
5362
(declare (ignore type))
54-
(let ((res-obj
63+
(let* ((node-id (get-id))
64+
(res-obj
5565
(make-instance
5666
'defun-node
5767
:keyword-lexem (make-lexem-wrapper (third keyword))
5868
:func-name (make-lexem-wrapper (third name))
5969
:parenthesis-info par-info
6070
:parameters-list (gen-list-node parms)
61-
:body-forms (get-form*-vector forms))))
71+
:body-forms (get-form*-vector forms)
72+
:id node-id)))
6273
(add-to-stats (lexem-string (third name))
6374
res-obj
6475
:stat-name :defuns
@@ -67,15 +78,19 @@
6778

6879
(defun gen-list-node (list-element)
6980
(when (eq (first list-element) :list)
70-
(make-instance 'list-node
71-
:parenthesis-info (second list-element)
72-
:elements (get-form*-vector (rest (rest list-element))))))
81+
(let ((node-id (get-id)))
82+
(make-instance 'list-node
83+
:parenthesis-info (second list-element)
84+
:elements (get-form*-vector (rest (rest list-element)))
85+
:id node-id))))
7386

7487
(defun match-function-call (list-element)
7588
(destructuring-bind (type par-info func-form &rest args)
7689
list-element
7790
(declare (ignore type))
78-
(make-instance 'function-call-node
79-
:func-lexem (match-s-expr func-form)
80-
:parenthesis-info par-info
81-
:func-arg-forms (get-form*-vector args))))
91+
(let ((node-id (get-id)))
92+
(make-instance 'function-call-node
93+
:func-lexem (match-s-expr func-form)
94+
:parenthesis-info par-info
95+
:func-arg-forms (get-form*-vector args)
96+
:id node-id))))

DiffBackend/src/lexer.lisp

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -66,13 +66,13 @@
6666
(= id2 -1)
6767
(= id1 id2))))))
6868

69-
(defun make-lexem (string line column type &key (id -1))
69+
(defun make-lexem (string line column type &key (lex-id -1))
7070
(make-instance 'lexem
7171
:string string
7272
:line line
7373
:column column
7474
:type type
75-
:id id))
75+
:id lex-id))
7676

7777
(defun is-lexem-symbol?= (lexem symbol-string)
7878
(when (eq (lexem-type lexem) :symbol)
@@ -159,7 +159,7 @@
159159
cur-lexem-line
160160
cur-lexem-column
161161
:integer
162-
:id (incf *cur-id*))
162+
:lex-id (incf *cur-id*))
163163
lexems)
164164
(setf lexem-l nil)
165165
(go COMMON)
@@ -176,7 +176,7 @@
176176
line
177177
cur-lexem-column
178178
:symbol
179-
:id (incf *cur-id*))
179+
:lex-id (incf *cur-id*))
180180
lexems)
181181
(setf lexem-l nil)
182182
(go COMMON)
@@ -185,7 +185,7 @@
185185
line
186186
cur-lexem-column
187187
:left-parent
188-
:id (incf *cur-id*))
188+
:lex-id (incf *cur-id*))
189189
lexems)
190190
(setf cur-char (read-char stream nil))
191191
(incf column)
@@ -195,7 +195,7 @@
195195
line
196196
cur-lexem-column
197197
:right-parent
198-
:id (incf *cur-id*))
198+
:lex-id (incf *cur-id*))
199199
lexems)
200200
(setf cur-char (read-char stream nil))
201201
(incf column)
@@ -213,7 +213,7 @@
213213
line
214214
cur-lexem-column
215215
:quote
216-
:id (incf *cur-id*))
216+
:lex-id (incf *cur-id*))
217217
lexems)
218218
(incf column)
219219
(setf cur-char (read-char stream nil))
@@ -243,7 +243,7 @@
243243
cur-lexem-line
244244
cur-lexem-column
245245
:string
246-
:id (incf *cur-id*))
246+
:lex-id (incf *cur-id*))
247247
lexems)
248248
(setf lexem-l nil)
249249
(setf cur-char (read-char stream nil))
@@ -282,7 +282,7 @@
282282
cur-lexem-line
283283
cur-lexem-column
284284
:error-lexem
285-
:id (incf *cur-id*))
285+
:lex-id (incf *cur-id*))
286286
lexems)
287287
(setf lexem-l nil)
288288
(push (make-instance

DiffBackend/tests/abstract-sem-tree-generator.lisp

Lines changed: 68 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
(in-package :diff-backend/tests/abstract-sem-tree-generator)
88

99
(def-ast-test atom.1
10-
"1"
10+
"1"
1111
(list
1212
(make-instance
1313
'lexem-wrapper-node
@@ -16,10 +16,11 @@
1616
1
1717
1
1818
:integer
19-
:id 1))))
19+
:lex-id 1)
20+
:id 0)))
2021

2122
(def-ast-test funcall.1
22-
"(fun)"
23+
"(fun)"
2324
(list
2425
(make-instance
2526
'function-call-node
@@ -30,10 +31,12 @@
3031
1
3132
2
3233
:symbol
33-
:id 2))
34+
:lex-id 2)
35+
:id 1)
3436
:parenthesis-info `((:lparen-coord 1 1)
3537
(:rparen-coord 1 5))
36-
:func-arg-forms ())))
38+
:func-arg-forms nil
39+
:id 0)))
3740

3841
(def-ast-test funcall.2
3942
"(fun 1)"
@@ -47,7 +50,8 @@
4750
1
4851
2
4952
:symbol
50-
:id 2))
53+
:lex-id 2)
54+
:id 1)
5155
:parenthesis-info `((:lparen-coord 1 1)
5256
(:rparen-coord 1 7))
5357
:func-arg-forms (vector (make-instance
@@ -58,36 +62,41 @@
5862
1
5963
6
6064
:integer
61-
:id 3))))))
65+
:lex-id 3)
66+
:id 2))
67+
:id 0)))
6268

6369
(def-ast-test defun.1
6470
"(defun a () 1)"
6571
(list
6672
(make-instance
6773
'defun-node
68-
:func-name (make-instance
69-
'lexem-wrapper-node
70-
:lexem-info (make-lexem
71-
"a"
72-
1
73-
8
74-
:symbol
75-
:id 3))
7674
:keyword-lexem (make-instance
7775
'lexem-wrapper-node
7876
:lexem-info (make-lexem
7977
"defun"
8078
1
8179
2
8280
:symbol
83-
:id 2))
81+
:lex-id 2)
82+
:id 1)
83+
:func-name (make-instance
84+
'lexem-wrapper-node
85+
:lexem-info (make-lexem
86+
"a"
87+
1
88+
8
89+
:symbol
90+
:lex-id 3)
91+
:id 2)
8492
:parenthesis-info `((:lparen-coord 1 1)
8593
(:rparen-coord 1 14))
8694
:parameters-list (make-instance
8795
'list-node
8896
:parenthesis-info `((:lparen-coord 1 10)
8997
(:rparen-coord 1 11))
90-
:elements ())
98+
:elements nil
99+
:id 3)
91100
:body-forms (vector
92101
(make-instance
93102
'lexem-wrapper-node
@@ -96,29 +105,33 @@
96105
1
97106
13
98107
:integer
99-
:id 6))))))
108+
:lex-id 6)
109+
:id 4))
110+
:id 0)))
100111

101112
(def-ast-test defun.2
102113
"(defun a (b) b)"
103114
(list
104115
(make-instance
105116
'defun-node
106-
:func-name (make-instance
107-
'lexem-wrapper-node
108-
:lexem-info (make-lexem
109-
"a"
110-
1
111-
8
112-
:symbol
113-
:id 3))
114117
:keyword-lexem (make-instance
115118
'lexem-wrapper-node
116119
:lexem-info (make-lexem
117120
"defun"
118121
1
119122
2
120123
:symbol
121-
:id 2))
124+
:lex-id 2)
125+
:id 1)
126+
:func-name (make-instance
127+
'lexem-wrapper-node
128+
:lexem-info (make-lexem
129+
"a"
130+
1
131+
8
132+
:symbol
133+
:lex-id 3)
134+
:id 2)
122135
:parenthesis-info `((:lparen-coord 1 1)
123136
(:rparen-coord 1 15))
124137
:parameters-list (make-instance
@@ -132,37 +145,44 @@
132145
1
133146
11
134147
:symbol
135-
:id 5))))
148+
:lex-id 5)
149+
:id 4))
150+
:id 3)
136151
:body-forms (vector (make-instance
137152
'lexem-wrapper-node
138153
:lexem-info (make-lexem
139154
"b"
140155
1
141156
14
142157
:symbol
143-
:id 7))))))
158+
:lex-id 7)
159+
:id 5))
160+
:id 0)))
144161

145162
(def-ast-test defun.3
146163
"(defun a (b) (f b 1))"
147164
(list
148165
(make-instance
149166
'defun-node
150-
:func-name (make-instance
151-
'lexem-wrapper-node
152-
:lexem-info (make-lexem
153-
"a"
154-
1
155-
8
156-
:symbol
157-
:id 3))
167+
:id 0
158168
:keyword-lexem (make-instance
159169
'lexem-wrapper-node
160170
:lexem-info (make-lexem
161171
"defun"
162172
1
163173
2
164174
:symbol
165-
:id 2))
175+
:lex-id 2)
176+
:id 1)
177+
:func-name (make-instance
178+
'lexem-wrapper-node
179+
:lexem-info (make-lexem
180+
"a"
181+
1
182+
8
183+
:symbol
184+
:lex-id 3)
185+
:id 2)
166186
:parenthesis-info `((:lparen-coord 1 1)
167187
(:rparen-coord 1 21))
168188
:parameters-list (make-instance
@@ -177,18 +197,22 @@
177197
1
178198
11
179199
:symbol
180-
:id 5))))
200+
:lex-id 5)
201+
:id 4))
202+
:id 3)
181203
:body-forms (vector
182204
(make-instance
183205
'function-call-node
206+
:id 5
184207
:func-lexem (make-instance
185208
'lexem-wrapper-node
209+
:id 6
186210
:lexem-info (make-lexem
187211
"f"
188212
1
189213
15
190214
:symbol
191-
:id 8))
215+
:lex-id 8))
192216
:parenthesis-info `((:lparen-coord 1 14)
193217
(:rparen-coord 1 20))
194218
:func-arg-forms (vector
@@ -199,12 +223,14 @@
199223
1
200224
17
201225
:symbol
202-
:id 9))
226+
:lex-id 9)
227+
:id 7)
203228
(make-instance
204229
'lexem-wrapper-node
205230
:lexem-info (make-lexem
206231
"1"
207232
1
208233
19
209234
:integer
210-
:id 10))))))))
235+
:lex-id 10)
236+
:id 8)))))))

0 commit comments

Comments
 (0)