crokus 0.0.2 → 0.0.3

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 4e16a6b8011982817b059498e6c02e6ad1e93026952740a3d914401c3d0993e2
4
- data.tar.gz: 7a08542bec75264d72199ba649b751f2291a4a678475a5841bef89c4d3b30207
3
+ metadata.gz: ef8bbae26ccb8fc2b32c8dd40bf6635272055ba5e158a0ed9b7e22aead35018a
4
+ data.tar.gz: 922d2ce547b6875e8cb99364f0ca5ba2edfd0c066cd888065bb84149a07a32c3
5
5
  SHA512:
6
- metadata.gz: 401661cdb8f7b4838a460e44f4fc27718acc2fc19e15bde18fd3614258e49e004242f81a2d36719f0c6f461ed39357cc5ad2f5b76224c3142ea0a358d4f9b3c1
7
- data.tar.gz: 967ed9eae447a63067c655ca266ba07ecdb4f6ac85549c8e59fe5bccb58a3c5e55e8341bbaa76906282f19e73d0c75365ba75a4c61ac0dd878822d82a076aa0d
6
+ metadata.gz: 72bc1089bcbc9edb53afb4e3bada17d4daa19b5e174c22516be36755e10478facadf68a6651edf6e9eb4c8574ad8fa82203b73b1a7c947f117080bcb3296755e
7
+ data.tar.gz: ca37c64d365528a95548ce2517d3f92bdd90ad62f071609695aebdb6b64e21f8e0b9ea6e525b495d7ec4d77ac5c24ae08e7d23a129aa87551d141edc8b860d91
@@ -15,12 +15,18 @@ module Crokus
15
15
 
16
16
  class CFG
17
17
  attr_accessor :name,:bbs,:starter
18
+ attr_accessor :infos
18
19
  def initialize name
19
20
  @name=name
20
21
  @bbs=[]
22
+ @infos={}
21
23
  @bbs << @starter=BasicBlock.new
22
24
  end
23
25
 
26
+ def each &block
27
+ @bbs.each &block
28
+ end
29
+
24
30
  def size
25
31
  @bbs.size
26
32
  end
@@ -29,22 +35,24 @@ module Crokus
29
35
  @bbs << bb
30
36
  end
31
37
 
32
- def print
33
- CFGPrinter.new.print(self)
38
+ def print verbose
39
+ CFGPrinter.new.print(self,verbose)
34
40
  end
41
+
35
42
  end
36
43
 
37
44
  class BasicBlock
38
45
  @@id=-1
39
46
  attr_accessor :id,:stmts,:succs
40
-
47
+ attr_accessor :infos
41
48
  alias :label :id
42
49
 
43
- def initialize
50
+ def initialize infos={}
44
51
  @@id+=1
45
52
  @id="L"+@@id.to_s
46
53
  @stmts=[]
47
54
  @succs=[]
55
+ @infos=infos
48
56
  end
49
57
 
50
58
  def <<(e)
@@ -74,6 +82,10 @@ module Crokus
74
82
  @stmts.compact.collect{|stmt| stmt.accept(@ppr)}.join("\n")
75
83
  end
76
84
 
85
+ def nextBranch
86
+ @succs.first
87
+ end
88
+
77
89
  def size
78
90
  @stmts.size
79
91
  end
@@ -6,7 +6,7 @@ module Crokus
6
6
 
7
7
  attr_accessor :code
8
8
 
9
- def print cfg
9
+ def print cfg,verbose=$options[:mute]!=true
10
10
  @code=Code.new
11
11
  @code << header
12
12
  @visited=[]
@@ -14,7 +14,7 @@ module Crokus
14
14
  @code << footer
15
15
  dot_name="cfg_#{cfg.name}.dot"
16
16
  @code.save_as dot_name
17
- puts "\t|--> graphviz file saved as '#{dot_name}'" unless $options[:mute]
17
+ puts "\t|--> graphviz file saved as '#{dot_name}'" if verbose
18
18
  end
19
19
 
20
20
  def header
@@ -1,7 +1,6 @@
1
1
  require_relative 'ast'
2
2
  require_relative 'ast_printer'
3
3
  require_relative 'parser'
4
- #require_relative 'parser_only'
5
4
  require_relative 'visitor'
6
5
  require_relative 'transformer'
7
6
  require_relative 'pretty_printer'
@@ -9,6 +8,9 @@ require_relative 'cfg_builder'
9
8
  require_relative 'tac_builder'
10
9
  require_relative 'ir_dumper'
11
10
 
11
+ # random C generation
12
+ require_relative 'cfg_random_gen'
13
+
12
14
  module Crokus
13
15
 
14
16
  class Compiler
@@ -112,6 +114,10 @@ module Crokus
112
114
  IRDumper.new.visit(@ast)
113
115
  end
114
116
 
117
+ def execute params
118
+ RandomGen.new.run(params)
119
+ end
120
+
115
121
  end
116
122
  end
117
123
  #
@@ -54,9 +54,6 @@ class GenericLexer
54
54
  open(code)
55
55
  tokens=[]
56
56
  tokens << next_token() while not @ssc.eos?
57
- # while not @ssc.eos?
58
- # tokens << (p next_token)
59
- # end
60
57
  tokens
61
58
  end
62
59
  end
@@ -15,6 +15,8 @@ module Crokus
15
15
  compiler.options = args = parse_options(arguments)
16
16
  if filename=args[:cfile]
17
17
  compiler.compile filename
18
+ elsif script=args[:random]
19
+ compiler.execute script
18
20
  else
19
21
  puts "need a C file : crokus [options] <file.c>"
20
22
  end
@@ -63,6 +65,10 @@ module Crokus
63
65
  options[:emit_ir] = true
64
66
  end
65
67
 
68
+ parser.on('--random PARAMS', "generates random c files, using parameters", String) do |params_filename|
69
+ options[:random] = params_filename
70
+ end
71
+
66
72
  parser.on("--vv", "verbose") do
67
73
  options[:verbose] = true
68
74
  end
@@ -37,7 +37,9 @@ class Token
37
37
  alias :str :val
38
38
  end
39
39
 
40
- ONE = Token.new [:int_lit,'1',['na','na']]
41
- ZERO = Token.new [:int_lit,'0',['na','na']]
42
- DUMMY= Token.new [:id ,'' ,['na','na']]
43
- EQUAL= Token.new [:eq ,'==' ,['na','na']]
40
+ ONE = Token.new [:int_lit,'1' ,['na','na']]
41
+ ZERO = Token.new [:int_lit,'0' ,['na','na']]
42
+ DUMMY= Token.new [:id ,'' ,['na','na']]
43
+ EQUAL= Token.new [:eq ,'==' ,['na','na']]
44
+ ASSIGN= Token.new [:assign ,'=' ,['na','na']]
45
+ MOD = Token.new [:mod ,'%' ,['na','na']]
@@ -1,3 +1,3 @@
1
1
  module Crokus
2
- VERSION="0.0.2"
2
+ VERSION="0.0.3"
3
3
  end
metadata CHANGED
@@ -1,15 +1,29 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: crokus
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.2
4
+ version: 0.0.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jean-Christophe Le Lann
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-09-20 00:00:00.000000000 Z
12
- dependencies: []
11
+ date: 2019-10-03 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: distribution
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - '='
18
+ - !ruby/object:Gem::Version
19
+ version: 0.7.3
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - '='
25
+ - !ruby/object:Gem::Version
26
+ version: 0.7.3
13
27
  description: Crokus is developped in Ruby and aims at providing simple basis for C
14
28
  transformations. It has been use for teaching purposes and applied to Electronic
15
29
  System Level experiments.