Class: BinaryParser::Expression

Inherits:
Object
  • Object
show all
Defined in:
lib/general_class/expression.rb

Direct Known Subclasses

BinaryOperator, Token

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

.immediate(value) ⇒ Object



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

Returns:

  • (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

#immediate?Boolean

Returns:

  • (Boolean)


40
41
42
# File 'lib/general_class/expression.rb', line 40

def immediate?
  self.is_a?(Token::Immediate)
end

#length_var?Boolean

Returns:

  • (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

Returns:

  • (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

Returns:

  • (Boolean)


24
25
26
# File 'lib/general_class/expression.rb', line 24

def value_var?
  self.is_a?(Token::Variable::Value)
end

#variable_tokensObject



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