Class: StringToTheory
Overview
var6 = 8
s(:lasgn, :var6, s(:lit, 8))
var6.length = 8
s(:attrasgn, s(:call, nil, :var6, s(:arglist)), :length=, s(:arglist, s(:lit, 8)))
return var8
s(:return, s(:call, nil, :var8, s(:arglist)))
var6[7]
s(:call, s(:call, nil, :var6, s(:arglist)), :[], s(:arglist, s(:lit, 7)))
var1.length = var2.length
s(:attrasgn, s(:call, nil, :var1, s(:arglist)), :length=, s(:arglist, s(:call, s(:call, nil, :var2, s(:arglist)), :length, s(:arglist))))
var6 == 7
s(:call, s(:call, nil, :var6, s(:arglist)), :==, s(:arglist, s(:lit, 7)))
if(var6 == 7)
end
s(:if, s(:call, s(:call, nil, :var6, s(:arglist)), :==, s(:arglist, s(:lit, 7))), nil, nil)
Statement.new(Return.new,var1.params[0])
s(:call, s(:const, :Statement), :new, s(:arglist, s(:call, s(:const, :Return), :new, s(:arglist)), s(:call, s(:call, s(:call, nil, :var1, s(:arglist)), :params, s(:arglist)), :[], s(:arglist, s(:lit, 0)))))
var1.any? { |x| x.include? var2.id }
s(:iter, s(:call, s(:call, nil, :var1, s(:arglist)), :any?, s(:arglist)), s(:lasgn, :x), s(:call, s(:lvar, :x), :include?, s(:arglist, s(:call, s(:call, nil, :var2, s(:arglist)), :id, s(:arglist)))))
var1.any? do |x|
var2 = var1.chop
end
s(:iter, s(:call, s(:call, nil, :var1, s(:arglist)), :any?, s(:arglist)), s(:lasgn, :x), s(:lasgn, :var2, s(:call, s(:call, nil, :var1, s(:arglist)), :chop, s(:arglist))))
Class Method Summary collapse
- .parse_attrasgn(sexp) ⇒ Object
- .parse_const(token) ⇒ Object
- .parse_custom_token(sexp) ⇒ Object
- .parse_if(sexp) ⇒ Object
- .parse_return(sexp) ⇒ Object
-
.parse_simple_token(token) ⇒ Object
TODO This method is very similar to the Parser.
-
.run(statement_string) ⇒ Object
Converts a string into a theory statement.
Methods inherited from Parser
identify_method, parse_iter, parse_lasgn, parse_token
Class Method Details
.parse_attrasgn(sexp) ⇒ Object
130 131 132 133 134 135 136 137 138 139 140 |
# File 'lib/util/StringToTheory.rb', line 130 def self.parse_attrasgn(sexp) # TODO Make a note of this change - the equal(=) is with the method call here return TheoryStatement.new( InstanceCallContainer.new( parse_token(sexp[1]), parse_token(sexp[2]) ), *parse_token(sexp[3]) ) end |
.parse_const(token) ⇒ Object
61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 |
# File 'lib/util/StringToTheory.rb', line 61 def self.parse_const(token) constants = { 'Statement'=>'StatementClass', 'Return'=>'ReturnClass', 'InstanceCallContainer'=>'InstanceCallContainerClass', 'StringLength'=>'StringLengthClass', 'Parser'=>'ParserClass', 'Unknown'=>'UnknownClass', 'Addition'=>'AdditionClass', 'Equal'=>'EqualClass', 'If'=>'IfClass', 'RuntimeMethod'=>'RuntimeMethodClass', 'CTestCase'=>'CTestCaseClass', 'Fixnum'=>'FixnumClass', 'Equivalent'=>'EquivalentClass', 'OpenStatement'=>'OpenStatementClass', 'BlockStatement'=> 'BlockStatementClass', 'Container'=> 'ContainerClass', 'Subtract'=> 'SubtractClass', 'Times'=> 'TimesClass', 'Chop'=> 'ChopClass', 'TheoryStatement'=> 'TheoryStatementClass' } raise StandardError.new('Unkown constant '+token.to_s) unless constants.has_key?(token.to_s) eval(constants[token.to_s]+'.new') end |
.parse_custom_token(sexp) ⇒ Object
88 89 90 91 92 93 94 95 96 97 98 99 |
# File 'lib/util/StringToTheory.rb', line 88 def self.parse_custom_token(sexp) if sexp[2].to_s.match(/^var(\d+)$/) id = sexp[2].to_s.match(/^var(\d+)$/)[1].to_i return TheoryVariable.new(id) elsif sexp[2].to_s.match(/^runtime_method$/) return IntrinsicRuntimeMethod.new elsif sexp[2].to_s.match(/^test_cases$/) return IntrinsicTestCases.new else raise StandardError.new('Could not match '+sexp[2].to_s) end end |
.parse_if(sexp) ⇒ Object
101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 |
# File 'lib/util/StringToTheory.rb', line 101 def self.parse_if(sexp) # TODO Look into the change in the nil position # # "if(var2 == var3)\nreturn true\nend" # s(:if, s(:call, s(:call, nil, :var2, s(:arglist)), :==, s(:arglist, s(:call, nil, :var3, s(:arglist)))), s(:return, s(:true)), nil) # # "if(var2 != var3)\nreturn true\nend" # s(:if, s(:call, s(:call, nil, :var2, s(:arglist)), :==, s(:arglist, s(:call, nil, :var3, s(:arglist)))), nil, s(:return, s(:true))) # internal_statements = (2...sexp.length).inject([]) do |total,x| total << sexp[x] unless sexp[x].nil? total end return OpenStatement.new( TheoryStatement.new( If.new, Container.new(parse_token(sexp[1])) ), *internal_statements.collect {|x| parse_token(x)} ) end |
.parse_return(sexp) ⇒ Object
124 125 126 127 128 |
# File 'lib/util/StringToTheory.rb', line 124 def self.parse_return(sexp) return TheoryStatement.new( *[sexp[0],sexp[1]].collect {|x| parse_token(x)} ) end |
.parse_simple_token(token) ⇒ Object
TODO This method is very similar to the Parser
48 49 50 51 52 53 54 55 56 57 58 59 |
# File 'lib/util/StringToTheory.rb', line 48 def self.parse_simple_token(token) if token.to_s.match(/^var(\d+)$/) id = token.to_s.match(/^var(\d+)$/)[1].to_i return TheoryVariable.new(id) end if token.to_s.match(/^[x|y|z]$/) then return BlockToken.new(token.to_s) end return Equal.new if token == '=' return Return.new if token == :return return LengthEqual.new if token == :length= return Equivalent.new if token == :== raise StandardError.new("Could not identify simple token '#{token.to_s}'") end |
.run(statement_string) ⇒ Object
Converts a string into a theory statement.
e.g. “var8 = 7” -> TheoryStatement.new(…)
41 42 43 44 45 |
# File 'lib/util/StringToTheory.rb', line 41 def self.run(statement_string) statement_string.gsub!(/<runtime_method>/,'runtime_method') return super(statement_string) end |