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 +4 -4
- data/lib/crokus/cfg.rb +16 -4
- data/lib/crokus/cfg_printer.rb +2 -2
- data/lib/crokus/compiler.rb +7 -1
- data/lib/crokus/generic_lexer.rb +0 -3
- data/lib/crokus/runner.rb +6 -0
- data/lib/crokus/token.rb +6 -4
- data/lib/crokus/version.rb +1 -1
- metadata +17 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: ef8bbae26ccb8fc2b32c8dd40bf6635272055ba5e158a0ed9b7e22aead35018a
|
4
|
+
data.tar.gz: 922d2ce547b6875e8cb99364f0ca5ba2edfd0c066cd888065bb84149a07a32c3
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 72bc1089bcbc9edb53afb4e3bada17d4daa19b5e174c22516be36755e10478facadf68a6651edf6e9eb4c8574ad8fa82203b73b1a7c947f117080bcb3296755e
|
7
|
+
data.tar.gz: ca37c64d365528a95548ce2517d3f92bdd90ad62f071609695aebdb6b64e21f8e0b9ea6e525b495d7ec4d77ac5c24ae08e7d23a129aa87551d141edc8b860d91
|
data/lib/crokus/cfg.rb
CHANGED
@@ -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
|
data/lib/crokus/cfg_printer.rb
CHANGED
@@ -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}'"
|
17
|
+
puts "\t|--> graphviz file saved as '#{dot_name}'" if verbose
|
18
18
|
end
|
19
19
|
|
20
20
|
def header
|
data/lib/crokus/compiler.rb
CHANGED
@@ -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
|
#
|
data/lib/crokus/generic_lexer.rb
CHANGED
data/lib/crokus/runner.rb
CHANGED
@@ -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
|
data/lib/crokus/token.rb
CHANGED
@@ -37,7 +37,9 @@ class Token
|
|
37
37
|
alias :str :val
|
38
38
|
end
|
39
39
|
|
40
|
-
ONE = Token.new
|
41
|
-
ZERO = Token.new
|
42
|
-
DUMMY= Token.new
|
43
|
-
EQUAL= Token.new
|
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']]
|
data/lib/crokus/version.rb
CHANGED
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.
|
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-
|
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.
|