systemrdl 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (40) hide show
  1. checksums.yaml +7 -0
  2. data/LICENSE.txt +21 -0
  3. data/README.md +127 -0
  4. data/lib/systemrdl/error.rb +55 -0
  5. data/lib/systemrdl/evaluator/address_allocation.rb +126 -0
  6. data/lib/systemrdl/evaluator/address_operation.rb +103 -0
  7. data/lib/systemrdl/evaluator/addrmap.rb +67 -0
  8. data/lib/systemrdl/evaluator/array_component.rb +42 -0
  9. data/lib/systemrdl/evaluator/builtin_properties.rb +400 -0
  10. data/lib/systemrdl/evaluator/common.rb +22 -0
  11. data/lib/systemrdl/evaluator/component_definition.rb +185 -0
  12. data/lib/systemrdl/evaluator/component_insts.rb +106 -0
  13. data/lib/systemrdl/evaluator/container_component.rb +16 -0
  14. data/lib/systemrdl/evaluator/field.rb +245 -0
  15. data/lib/systemrdl/evaluator/instance.rb +120 -0
  16. data/lib/systemrdl/evaluator/list.rb +26 -0
  17. data/lib/systemrdl/evaluator/literal.rb +173 -0
  18. data/lib/systemrdl/evaluator/operation.rb +241 -0
  19. data/lib/systemrdl/evaluator/processor.rb +166 -0
  20. data/lib/systemrdl/evaluator/property.rb +116 -0
  21. data/lib/systemrdl/evaluator/property_assignment.rb +220 -0
  22. data/lib/systemrdl/evaluator/reference.rb +135 -0
  23. data/lib/systemrdl/evaluator/reg.rb +156 -0
  24. data/lib/systemrdl/evaluator/regfile.rb +33 -0
  25. data/lib/systemrdl/evaluator/root.rb +39 -0
  26. data/lib/systemrdl/evaluator/value.rb +13 -0
  27. data/lib/systemrdl/evaluator.rb +14 -0
  28. data/lib/systemrdl/model/instance.rb +194 -0
  29. data/lib/systemrdl/model/value.rb +54 -0
  30. data/lib/systemrdl/model.rb +11 -0
  31. data/lib/systemrdl/parser/generated_parser.rb +2808 -0
  32. data/lib/systemrdl/parser/node.rb +17 -0
  33. data/lib/systemrdl/parser/parser.rb +86 -0
  34. data/lib/systemrdl/parser/scanner.rb +251 -0
  35. data/lib/systemrdl/parser/systemrdl.y +448 -0
  36. data/lib/systemrdl/parser/token.rb +58 -0
  37. data/lib/systemrdl/parser.rb +11 -0
  38. data/lib/systemrdl/version.rb +5 -0
  39. data/lib/systemrdl.rb +90 -0
  40. metadata +96 -0
@@ -0,0 +1,448 @@
1
+ class SystemRDL::Parser::GeneratedParser
2
+ token
3
+ # Keywords
4
+ ABSTRACT ACCESSTYPE ADDRESSINGTYPE ADDRMAP ALIAS
5
+ ALL BIT BOOLEAN BOTHEDGE COMPACT
6
+ COMPONENT COMPONENTWIDTH CONSTRAINT DEFAULT ENCODE
7
+ ENUM EXTERNAL FALSE FIELD FULLALIGN
8
+ HW INSIDE INTERNAL LEVEL LONGINT
9
+ MEM NA NEGEDGE NONSTICKY NUMBER
10
+ ONREADTYPE ONWRITETYPE POSEDGE PROPERTY R
11
+ RCLR REF REG REGALIGN REGFILE
12
+ RSET RUSER RW RW1 SIGNAL
13
+ STRING STRUCT SW THIS TRUE
14
+ TYPE UNSIGNED W W1 WCLR
15
+ WOCLR WOSET WOT WR WSET
16
+ WUSER WZC WZS WZT
17
+ # Literal
18
+ STRING
19
+ NUMBER
20
+ VERILOG_NUMBER
21
+ # Identifier
22
+ SIMPLE_ID
23
+ # Conrol tokens
24
+ EOS
25
+ __TEST_PROPERTY_ASSIGNMENT__
26
+ __TEST_CONSTANT_EXPRESSION__
27
+
28
+ prechigh
29
+ nonassoc UOP
30
+ left "**"
31
+ left "*" "/" "%"
32
+ left "+" "-"
33
+ left "<<" ">>"
34
+ left "<" "<=" ">" ">="
35
+ left "==" "!="
36
+ left "&"
37
+ left "^" "~^" "^~"
38
+ left "|"
39
+ left "&&"
40
+ left "||"
41
+ right "?" ":"
42
+ preclow
43
+
44
+ rule
45
+ #
46
+ # B.1 SystemRDL source text
47
+ #
48
+ root
49
+ : description+ EOS {
50
+ result = node(:root, val[0], val[0])
51
+ }
52
+ | __TEST_PROPERTY_ASSIGNMENT__ property_assignment EOS {
53
+ result = val[1]
54
+ }
55
+ | __TEST_CONSTANT_EXPRESSION__ constant_expression EOS {
56
+ result = val[1]
57
+ }
58
+ description
59
+ : component_def
60
+
61
+ #
62
+ # B.3 Component definition
63
+ #
64
+ component_def
65
+ : component_type id "{" component_body_elem* "}" component_inst_type component_insts ";" {
66
+ insts = component_insts_node(val[5], val[6])
67
+ result = node(:component_named_def, [val[0], val[1], *val[3], insts], val)
68
+ }
69
+ | component_type "{" component_body_elem* "}" component_inst_type component_insts ";" {
70
+ insts = component_insts_node(val[4], val[5])
71
+ result = node(:component_anon_def, [val[0], *val[2], insts], val)
72
+ }
73
+ | component_type id "{" component_body_elem* "}" component_insts ";" {
74
+ result = node(:component_named_def, [val[0], val[1], *val[3], val[5]], val)
75
+ }
76
+ | component_type id "{" component_body_elem* "}" ";" {
77
+ result = node(:component_named_def, [val[0], val[1], *val[3]], val)
78
+ }
79
+ | component_type "{" component_body_elem* "}" component_insts ";" {
80
+ result = node(:component_anon_def, [val[0], *val[2], val[4]], val)
81
+ }
82
+ | component_inst_type component_type id "{" component_body_elem* "}" component_insts ";" {
83
+ insts = component_insts_node(val[0], val[6])
84
+ result = node(:component_named_def, [val[1], val[2], *val[4], insts], val)
85
+ }
86
+ | component_inst_type component_type "{" component_body_elem* "}" component_insts ";" {
87
+ insts = component_insts_node(val[0], val[5])
88
+ result = node(:component_anon_def, [val[1], *val[3], insts], val)
89
+ }
90
+ component_body_elem
91
+ : component_def
92
+ | property_assignment
93
+ | explicit_component_inst
94
+ component_type
95
+ : ADDRMAP | REGFILE | REG | FIELD | MEM
96
+ explicit_component_inst
97
+ : id component_insts ";" {
98
+ result = node(:explicit_component_inst, val[..1], val)
99
+ }
100
+ | component_inst_type id component_insts ";" {
101
+ insts = component_insts_node(val[0], val[2])
102
+ result = node(:explicit_component_inst, [val[1], insts], val)
103
+ }
104
+ component_insts
105
+ : component_inst ("," component_inst)* {
106
+ result = node(:component_insts, to_list(val, include_separator: true), val)
107
+ }
108
+ component_inst
109
+ : id component_inst_array_or_range? reset_value? address_assignment? address_stride? address_alignment? {
110
+ result = component_inst_node(val)
111
+ }
112
+ reset_value
113
+ : "=" constant_expression {
114
+ result = node(:reset_value, [val[1]], val)
115
+ }
116
+ address_assignment
117
+ : "@" constant_expression {
118
+ result = node(:address_assignment, [val[1]], val)
119
+ }
120
+ address_stride
121
+ : "+=" constant_expression {
122
+ result = node(:address_stride, [val[1]], val)
123
+ }
124
+ address_alignment
125
+ : "%=" constant_expression {
126
+ result = node(:address_alignment, [val[1]], val)
127
+ }
128
+ component_inst_type
129
+ : EXTERNAL
130
+ | INTERNAL
131
+ component_inst_array_or_range
132
+ : array {
133
+ result = [val[0], nil]
134
+ }
135
+ | range {
136
+ result = [nil, val[0]]
137
+ }
138
+
139
+ #
140
+ # B.8 Property assignment
141
+ #
142
+ property_assignment
143
+ : DEFAULT prop_mod id ";" {
144
+ result = node(:default_prop_modifier, val[1..2], val)
145
+ }
146
+ | prop_mod id ";" {
147
+ result = node(:prop_modifier, val[0..1], val)
148
+ }
149
+ | DEFAULT prop_assignment_lhs ";" {
150
+ result = node(:default_prop_assignment, [val[1]], val)
151
+ }
152
+ | prop_assignment_lhs ";" {
153
+ result = node(:prop_assignment, [val[0]], val)
154
+ }
155
+ | DEFAULT prop_assignment_lhs "=" prop_assignment_rhs ";" {
156
+ result = node(:default_prop_assignment, [val[1], val[3]], val)
157
+ }
158
+ | prop_assignment_lhs "=" prop_assignment_rhs ";" {
159
+ result = node(:prop_assignment, [val[0], val[2]], val)
160
+ }
161
+ | DEFAULT encode "=" id ";" {
162
+ result = node(:default_prop_assignment, [val[1], val[3]], val)
163
+ }
164
+ | encode "=" id ";" {
165
+ result = node(:prop_assignment, [val[0], val[2]], val)
166
+ }
167
+ | prop_ref ";" {
168
+ result = node(:post_prop_assignment, [val[0]], val)
169
+ }
170
+ | prop_ref "=" prop_assignment_rhs ";" {
171
+ result = node(:post_prop_assignment, [val[0], val[2]], val)
172
+ }
173
+ | encode_ref "=" id ";" {
174
+ result = node(:post_prop_assignment, [val[0], val[2]], val)
175
+ }
176
+ prop_mod
177
+ : POSEDGE | NEGEDGE | BOTHEDGE | LEVEL | NONSTICKY
178
+ prop_assignment_lhs
179
+ : id
180
+ | prop_keyword
181
+ prop_keyword
182
+ : SW {
183
+ result = node(:id, val, val)
184
+ }
185
+ | HW {
186
+ result = node(:id, val, val)
187
+ }
188
+ | RCLR {
189
+ result = node(:id, val, val)
190
+ }
191
+ | RSET {
192
+ result = node(:id, val, val)
193
+ }
194
+ | WOCLR {
195
+ result = node(:id, val, val)
196
+ }
197
+ | WOSET {
198
+ result = node(:id, val, val)
199
+ }
200
+ prop_assignment_rhs
201
+ : constant_expression
202
+ | precedencetype_literal {
203
+ result = node(:precedencetype, val, val)
204
+ }
205
+ encode
206
+ : ENCODE {
207
+ result = node(:id, val, val)
208
+ }
209
+ encode_ref
210
+ : instance_ref "->" encode {
211
+ result = node(:prop_ref, [val[0], val[2]], val)
212
+ }
213
+
214
+ #
215
+ # B.11 Reference
216
+ #
217
+ instance_ref
218
+ : instance_ref_element ("." instance_ref_element)* {
219
+ result = node(:instance_ref, to_list(val, include_separator: true), val)
220
+ }
221
+ prop_ref
222
+ : instance_ref "->" id {
223
+ result = node(:prop_ref, [val[0], val[2]], val)
224
+ }
225
+ | instance_ref "->" prop_keyword {
226
+ result = node(:prop_ref, [val[0], val[2]], val)
227
+ }
228
+ instance_or_prop_ref
229
+ : prop_ref
230
+ | instance_ref
231
+ instance_ref_element
232
+ : id array {
233
+ result = node(:instance_ref_element, val, val)
234
+ }
235
+ | id {
236
+ result = node(:instance_ref_element, val, val)
237
+ }
238
+
239
+ #
240
+ # B.12 Array and range
241
+ #
242
+ range
243
+ : "[" constant_expression ":" constant_expression "]" {
244
+ result = node(:range, [val[1], val[3]], val)
245
+ }
246
+ array
247
+ : ("[" constant_expression "]")+ {
248
+ result = array_node(val)
249
+ }
250
+
251
+ #
252
+ # B.13 Concatenation
253
+ #
254
+ constant_concatenation
255
+ : "{" constant_expression ("," constant_expression)* "}" {
256
+ result = node(:concatenation, to_list(val[1..-2], include_separator: true), val)
257
+ }
258
+ constant_multiple_concatenation
259
+ : "{" constant_expression constant_concatenation "}" {
260
+ result = node(:replication, val[1..2], val)
261
+ }
262
+
263
+ #
264
+ # B.14 Data types
265
+ #
266
+ simple_type
267
+ : LONGINT {
268
+ result = node(:data_type, val, val)
269
+ }
270
+ | BIT {
271
+ result = node(:data_type, val, val)
272
+ }
273
+
274
+ #
275
+ # B.15 Literals
276
+ #
277
+ boolean_literal
278
+ : TRUE | FALSE
279
+ accesstype_literal
280
+ : NA | RW | WR | R | W | RW1 | W1
281
+ onreadtype_literal
282
+ : RCLR | RSET | RUSER
283
+ onwritetype_literal
284
+ : WOSET | WOCLR | WOT | WZS | WZC | WZT | WCLR | WSET | WUSER
285
+ addressingtype_literal
286
+ : COMPACT | REGALIGN | FULLALIGN
287
+ precedencetype_literal
288
+ : HW | SW
289
+
290
+ #
291
+ # B.16 Expressions
292
+ #
293
+ constant_expression
294
+ : constant_primary
295
+ | "!" constant_expression = UOP {
296
+ result = uop_node(val)
297
+ }
298
+ | "+" constant_expression = UOP {
299
+ result = uop_node(val)
300
+ }
301
+ | "-" constant_expression = UOP {
302
+ result = uop_node(val)
303
+ }
304
+ | "~" constant_expression = UOP {
305
+ result = uop_node(val)
306
+ }
307
+ | "&" constant_expression = UOP {
308
+ result = uop_node(val)
309
+ }
310
+ | "~&" constant_expression = UOP {
311
+ result = uop_node(val)
312
+ }
313
+ | "|" constant_expression = UOP {
314
+ result = uop_node(val)
315
+ }
316
+ | "~|" constant_expression = UOP {
317
+ result = uop_node(val)
318
+ }
319
+ | "^" constant_expression = UOP {
320
+ result = uop_node(val)
321
+ }
322
+ | "~^" constant_expression = UOP {
323
+ result = uop_node(val)
324
+ }
325
+ | "^~" constant_expression = UOP {
326
+ result = uop_node(val)
327
+ }
328
+ | constant_expression "&&" constant_expression {
329
+ result = bop_node(val)
330
+ }
331
+ | constant_expression "||" constant_expression {
332
+ result = bop_node(val)
333
+ }
334
+ | constant_expression "<" constant_expression {
335
+ result = bop_node(val)
336
+ }
337
+ | constant_expression ">" constant_expression {
338
+ result = bop_node(val)
339
+ }
340
+ | constant_expression "<=" constant_expression {
341
+ result = bop_node(val)
342
+ }
343
+ | constant_expression ">=" constant_expression {
344
+ result = bop_node(val)
345
+ }
346
+ | constant_expression "==" constant_expression {
347
+ result = bop_node(val)
348
+ }
349
+ | constant_expression "!=" constant_expression {
350
+ result = bop_node(val)
351
+ }
352
+ | constant_expression ">>" constant_expression {
353
+ result = bop_node(val)
354
+ }
355
+ | constant_expression "<<" constant_expression {
356
+ result = bop_node(val)
357
+ }
358
+ | constant_expression "&" constant_expression {
359
+ result = bop_node(val)
360
+ }
361
+ | constant_expression "|" constant_expression {
362
+ result = bop_node(val)
363
+ }
364
+ | constant_expression "^" constant_expression {
365
+ result = bop_node(val)
366
+ }
367
+ | constant_expression "~^" constant_expression {
368
+ result = bop_node(val)
369
+ }
370
+ | constant_expression "^~" constant_expression {
371
+ result = bop_node(val)
372
+ }
373
+ | constant_expression "*" constant_expression {
374
+ result = bop_node(val)
375
+ }
376
+ | constant_expression "/" constant_expression {
377
+ result = bop_node(val)
378
+ }
379
+ | constant_expression "%" constant_expression {
380
+ result = bop_node(val)
381
+ }
382
+ | constant_expression "+" constant_expression {
383
+ result = bop_node(val)
384
+ }
385
+ | constant_expression "-" constant_expression {
386
+ result = bop_node(val)
387
+ }
388
+ | constant_expression "**" constant_expression {
389
+ result = bop_node(val)
390
+ }
391
+ | constant_expression "?" constant_expression ":" constant_expression {
392
+ result = node(:conditional_operation, [val[0], val[2], val[4]], val)
393
+ }
394
+ constant_primary
395
+ : primary_literal
396
+ | constant_concatenation
397
+ | constant_multiple_concatenation
398
+ | "(" constant_expression ")" {
399
+ result = val[1].replace_token_range(to_token_range(val))
400
+ }
401
+ | constant_cast
402
+ | instance_or_prop_ref
403
+ primary_literal
404
+ : boolean_literal {
405
+ result = node(:boolean, val, val)
406
+ }
407
+ | STRING {
408
+ result = node(:string, val, val)
409
+ }
410
+ | NUMBER {
411
+ result = node(:number, val, val)
412
+ }
413
+ | VERILOG_NUMBER {
414
+ result = node(:verilog_number, val, val)
415
+ }
416
+ | accesstype_literal {
417
+ result = node(:accesstype, val, val)
418
+ }
419
+ | onreadtype_literal {
420
+ result = node(:onreadtype, val, val)
421
+ }
422
+ | onwritetype_literal {
423
+ result = node(:onwritetype, val, val)
424
+ }
425
+ | addressingtype_literal {
426
+ result = node(:addressingtype, val, val)
427
+ }
428
+ | THIS {
429
+ result = node(:this, val, val)
430
+ }
431
+ constant_cast
432
+ : casting_type "'" "(" constant_expression ")" {
433
+ result = node(:cast, [val[0], val[3]], val)
434
+ }
435
+ casting_type
436
+ : simple_type
437
+ | constant_primary
438
+ | BOOLEAN {
439
+ result = node(:data_type, val, val)
440
+ }
441
+
442
+ #
443
+ # B.17 Identifiers
444
+ #
445
+ id
446
+ : SIMPLE_ID {
447
+ result = node(:id, val, val)
448
+ }
@@ -0,0 +1,58 @@
1
+ # frozen_string_literal: true
2
+
3
+ module SystemRDL
4
+ module Parser
5
+ class Position
6
+ def initialize(filename, line, column)
7
+ @filename = filename
8
+ @line = line
9
+ @column = column
10
+ freeze
11
+ end
12
+
13
+ attr_reader :filename
14
+ attr_reader :line
15
+ attr_reader :column
16
+
17
+ def to_s
18
+ "filename: #{filename} line: #{line} column: #{column}"
19
+ end
20
+ end
21
+
22
+ class Token
23
+ def initialize(text, kind, position)
24
+ @text = text
25
+ @kind = kind
26
+ @position = position
27
+ freeze
28
+ end
29
+
30
+ attr_reader :text
31
+ attr_reader :kind
32
+ attr_reader :position
33
+
34
+ def to_sym
35
+ text.to_sym
36
+ end
37
+
38
+ def to_token_range
39
+ TokenRange.new(self)
40
+ end
41
+
42
+ def ==(other)
43
+ text == ((other.is_a?(Token) && other.text) || other)
44
+ end
45
+ end
46
+
47
+ class TokenRange
48
+ def initialize(head, tail = nil)
49
+ @head = head
50
+ @tail = tail || head
51
+ freeze
52
+ end
53
+
54
+ attr_reader :head
55
+ attr_reader :tail
56
+ end
57
+ end
58
+ end
@@ -0,0 +1,11 @@
1
+ # frozen_string_literal: true
2
+
3
+ module SystemRDL
4
+ module Parser
5
+ def self.parse(code, filename: 'unknown', debug: false, test: nil)
6
+ scanner = Scanner.new(code, filename, test)
7
+ parser = Parser.new(scanner, debug:)
8
+ parser.parse
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,5 @@
1
+ # frozen_string_literal: true
2
+
3
+ module SystemRDL
4
+ VERSION = '0.1.0'
5
+ end
data/lib/systemrdl.rb ADDED
@@ -0,0 +1,90 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'strscan'
4
+ require 'ast'
5
+
6
+ require_relative 'systemrdl/version'
7
+ require_relative 'systemrdl/error'
8
+ require_relative 'systemrdl/parser/token'
9
+ require_relative 'systemrdl/parser/scanner'
10
+ require_relative 'systemrdl/parser/node'
11
+ require_relative 'systemrdl/parser/generated_parser'
12
+ require_relative 'systemrdl/parser/parser'
13
+ require_relative 'systemrdl/parser'
14
+ require_relative 'systemrdl/evaluator/value'
15
+ require_relative 'systemrdl/evaluator/common'
16
+ require_relative 'systemrdl/evaluator/list'
17
+ require_relative 'systemrdl/evaluator/literal'
18
+ require_relative 'systemrdl/evaluator/operation'
19
+ require_relative 'systemrdl/evaluator/instance'
20
+ require_relative 'systemrdl/evaluator/reference'
21
+ require_relative 'systemrdl/evaluator/property'
22
+ require_relative 'systemrdl/evaluator/property_assignment'
23
+ require_relative 'systemrdl/evaluator/builtin_properties'
24
+ require_relative 'systemrdl/evaluator/component_insts'
25
+ require_relative 'systemrdl/evaluator/component_definition'
26
+ require_relative 'systemrdl/evaluator/address_operation'
27
+ require_relative 'systemrdl/evaluator/address_allocation'
28
+ require_relative 'systemrdl/evaluator/array_component'
29
+ require_relative 'systemrdl/evaluator/container_component'
30
+ require_relative 'systemrdl/evaluator/field'
31
+ require_relative 'systemrdl/evaluator/reg'
32
+ require_relative 'systemrdl/evaluator/regfile'
33
+ require_relative 'systemrdl/evaluator/addrmap'
34
+ require_relative 'systemrdl/evaluator/root'
35
+ require_relative 'systemrdl/evaluator/processor'
36
+ require_relative 'systemrdl/evaluator'
37
+ require_relative 'systemrdl/model/value'
38
+ require_relative 'systemrdl/model/instance'
39
+ require_relative 'systemrdl/model'
40
+
41
+ module SystemRDL
42
+ class << self
43
+ def compile(*filenames)
44
+ __compile_multiple(filenames, :file_reader)
45
+ end
46
+
47
+ def compile_streams(streams)
48
+ __compile_multiple(streams, :stream_reader)
49
+ end
50
+
51
+ def compile_source(rdl, filename: 'unknown')
52
+ _, models = __compile(rdl, filename, nil, nil)
53
+ models
54
+ end
55
+
56
+ private
57
+
58
+ def file_reader(filename, &)
59
+ File.open(filename) { |f| stream_reader(filename, f, &) }
60
+ end
61
+
62
+ def stream_reader(filename, stream)
63
+ rdl = stream.read
64
+ yield(rdl, filename)
65
+ end
66
+
67
+ def __compile_multiple(inputs, reader)
68
+ _, models = inputs.inject([nil, nil]) do |(root, results), input|
69
+ __send__(reader, *input) do |rdl, filename|
70
+ __compile(rdl, filename, root, results)
71
+ end
72
+ end
73
+
74
+ models
75
+ end
76
+
77
+ def __compile(rdl, filename, root, results)
78
+ ast = Parser.parse(rdl, filename:)
79
+ evaluated = Evaluator.evaluate(ast, root)
80
+ models = Model.build(evaluated)
81
+
82
+ if results
83
+ results.concat(models)
84
+ [evaluated, results]
85
+ else
86
+ [evaluated, models]
87
+ end
88
+ end
89
+ end
90
+ end
metadata ADDED
@@ -0,0 +1,96 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: systemrdl
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Taichi Ishitani
8
+ bindir: bin
9
+ cert_chain: []
10
+ date: 1980-01-02 00:00:00.000000000 Z
11
+ dependencies:
12
+ - !ruby/object:Gem::Dependency
13
+ name: ast
14
+ requirement: !ruby/object:Gem::Requirement
15
+ requirements:
16
+ - - ">="
17
+ - !ruby/object:Gem::Version
18
+ version: '2.4'
19
+ type: :runtime
20
+ prerelease: false
21
+ version_requirements: !ruby/object:Gem::Requirement
22
+ requirements:
23
+ - - ">="
24
+ - !ruby/object:Gem::Version
25
+ version: '2.4'
26
+ description: A SystemRDL 2.0 front-end for Ruby
27
+ email:
28
+ - taichi730@gmail.com
29
+ executables: []
30
+ extensions: []
31
+ extra_rdoc_files: []
32
+ files:
33
+ - LICENSE.txt
34
+ - README.md
35
+ - lib/systemrdl.rb
36
+ - lib/systemrdl/error.rb
37
+ - lib/systemrdl/evaluator.rb
38
+ - lib/systemrdl/evaluator/address_allocation.rb
39
+ - lib/systemrdl/evaluator/address_operation.rb
40
+ - lib/systemrdl/evaluator/addrmap.rb
41
+ - lib/systemrdl/evaluator/array_component.rb
42
+ - lib/systemrdl/evaluator/builtin_properties.rb
43
+ - lib/systemrdl/evaluator/common.rb
44
+ - lib/systemrdl/evaluator/component_definition.rb
45
+ - lib/systemrdl/evaluator/component_insts.rb
46
+ - lib/systemrdl/evaluator/container_component.rb
47
+ - lib/systemrdl/evaluator/field.rb
48
+ - lib/systemrdl/evaluator/instance.rb
49
+ - lib/systemrdl/evaluator/list.rb
50
+ - lib/systemrdl/evaluator/literal.rb
51
+ - lib/systemrdl/evaluator/operation.rb
52
+ - lib/systemrdl/evaluator/processor.rb
53
+ - lib/systemrdl/evaluator/property.rb
54
+ - lib/systemrdl/evaluator/property_assignment.rb
55
+ - lib/systemrdl/evaluator/reference.rb
56
+ - lib/systemrdl/evaluator/reg.rb
57
+ - lib/systemrdl/evaluator/regfile.rb
58
+ - lib/systemrdl/evaluator/root.rb
59
+ - lib/systemrdl/evaluator/value.rb
60
+ - lib/systemrdl/model.rb
61
+ - lib/systemrdl/model/instance.rb
62
+ - lib/systemrdl/model/value.rb
63
+ - lib/systemrdl/parser.rb
64
+ - lib/systemrdl/parser/generated_parser.rb
65
+ - lib/systemrdl/parser/node.rb
66
+ - lib/systemrdl/parser/parser.rb
67
+ - lib/systemrdl/parser/scanner.rb
68
+ - lib/systemrdl/parser/systemrdl.y
69
+ - lib/systemrdl/parser/token.rb
70
+ - lib/systemrdl/version.rb
71
+ homepage: https://github.com/taichi-ishitani/systemrdl
72
+ licenses:
73
+ - MIT
74
+ metadata:
75
+ bug_tracker_uri: https://github.com/taichi-ishitani/systemrdl/issues
76
+ homepage_uri: https://github.com/taichi-ishitani/systemrdl
77
+ rubygems_mfa_required: 'true'
78
+ source_code_uri: https://github.com/taichi-ishitani/systemrdl
79
+ rdoc_options: []
80
+ require_paths:
81
+ - lib
82
+ required_ruby_version: !ruby/object:Gem::Requirement
83
+ requirements:
84
+ - - ">="
85
+ - !ruby/object:Gem::Version
86
+ version: 3.2.0
87
+ required_rubygems_version: !ruby/object:Gem::Requirement
88
+ requirements:
89
+ - - ">="
90
+ - !ruby/object:Gem::Version
91
+ version: '0'
92
+ requirements: []
93
+ rubygems_version: 4.0.3
94
+ specification_version: 4
95
+ summary: A SystemRDL 2.0 front-end for Ruby
96
+ test_files: []