Class: BinaryParser::Expression
- Inherits:
-
Object
- Object
- BinaryParser::Expression
show all
- Defined in:
- lib/general_class/expression.rb
Defined Under Namespace
Classes: BinaryOperator, RPN, Token
Class Method Summary
collapse
Instance Method Summary
collapse
Constructor Details
#initialize(*args) ⇒ Expression
Returns a new instance of Expression.
94
95
96
|
# File 'lib/general_class/expression.rb', line 94
def initialize(*args)
raise BadManipulationError, "Expression is abstract class."
end
|
Class Method Details
.control_var(symbol) ⇒ Object
12
13
14
|
# File 'lib/general_class/expression.rb', line 12
def self.control_var(symbol)
Token::Variable::Control.new(symbol)
end
|
20
21
22
|
# File 'lib/general_class/expression.rb', line 20
def self.immediate(value)
Token::Immediate.new(value)
end
|
.length_var(symbol) ⇒ Object
8
9
10
|
# File 'lib/general_class/expression.rb', line 8
def self.length_var(symbol)
Token::Variable::Length.new(symbol)
end
|
.nextbits_var(length) ⇒ Object
16
17
18
|
# File 'lib/general_class/expression.rb', line 16
def self.nextbits_var(length)
Token::Variable::Nextbits.new(length)
end
|
.value_var(symbol) ⇒ Object
4
5
6
|
# File 'lib/general_class/expression.rb', line 4
def self.value_var(symbol)
Token::Variable::Value.new(symbol)
end
|
Instance Method Details
#%(other) ⇒ Object
68
69
70
|
# File 'lib/general_class/expression.rb', line 68
def %(other)
binary_op(other, Token::Operator::Mod.instance)
end
|
#*(other) ⇒ Object
60
61
62
|
# File 'lib/general_class/expression.rb', line 60
def *(other)
binary_op(other, Token::Operator::Mul.instance)
end
|
#+(other) ⇒ Object
52
53
54
|
# File 'lib/general_class/expression.rb', line 52
def +(other)
binary_op(other, Token::Operator::Add.instance)
end
|
#-(other) ⇒ Object
56
57
58
|
# File 'lib/general_class/expression.rb', line 56
def -(other)
binary_op(other, Token::Operator::Sub.instance)
end
|
#/(other) ⇒ Object
64
65
66
|
# File 'lib/general_class/expression.rb', line 64
def /(other)
binary_op(other, Token::Operator::Div.instance)
end
|
#binary_op(other, op) ⇒ Object
72
73
74
|
# File 'lib/general_class/expression.rb', line 72
def binary_op(other, op)
BinaryOperator.new(self, other, op)
end
|
#coerce(other) ⇒ Object
44
45
46
47
48
49
50
|
# File 'lib/general_class/expression.rb', line 44
def coerce(other)
if other.is_a?(Integer)
return Token::Immediate.new(other), self
else
super
end
end
|
#control_var? ⇒ Boolean
32
33
34
|
# File 'lib/general_class/expression.rb', line 32
def control_var?
self.is_a?(Token::Variable::Control)
end
|
#eval(&token_eval_proc) ⇒ Object
86
87
88
|
# File 'lib/general_class/expression.rb', line 86
def eval(&token_eval_proc)
to_rpn.eval(&token_eval_proc)
end
|
40
41
42
|
# File 'lib/general_class/expression.rb', line 40
def immediate?
self.is_a?(Token::Immediate)
end
|
#length_var? ⇒ Boolean
28
29
30
|
# File 'lib/general_class/expression.rb', line 28
def length_var?
self.is_a?(Token::Variable::Length)
end
|
#nextbits_var? ⇒ Boolean
36
37
38
|
# File 'lib/general_class/expression.rb', line 36
def nextbits_var?
self.is_a?(Token::Variable::Nextbits)
end
|
#to_exp(exp) ⇒ Object
76
77
78
79
80
81
82
83
84
|
# File 'lib/general_class/expression.rb', line 76
def to_exp(exp)
if exp.is_a?(Expression)
exp
elsif exp.is_a?(Integer)
Token::Immediate.new(exp)
else
raise BadManipulationError, "Can't convert #{exp} into Expression."
end
end
|
#value_var? ⇒ Boolean
24
25
26
|
# File 'lib/general_class/expression.rb', line 24
def value_var?
self.is_a?(Token::Variable::Value)
end
|
#variable_tokens ⇒ Object
90
91
92
|
# File 'lib/general_class/expression.rb', line 90
def variable_tokens
to_rpn.tokens.select{|token| token.is_a?(Token::Variable)}
end
|