crokus 0.0.2 → 0.0.3

Sign up to get free protection for your applications and to get access to all the features.
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.