Class: GlooLang::Core::Parser

Inherits:
Object
  • Object
show all
Defined in:
lib/gloo_lang/core/parser.rb

Instance Method Summary collapse

Constructor Details

#initialize(engine) ⇒ Parser

Set up the parser.



15
16
17
18
# File 'lib/gloo_lang/core/parser.rb', line 15

def initialize( engine )
  @engine = engine
  @engine.log.debug 'parser intialized...'
end

Instance Method Details

#parse_immediate(cmd) ⇒ Object

Parse a command from the immediate execution context.



23
24
25
26
27
28
29
30
31
32
33
# File 'lib/gloo_lang/core/parser.rb', line 23

def parse_immediate( cmd )
  cmd, params = split_params cmd
  params = GlooLang::Core::Tokens.new( params ) if params
  tokens = GlooLang::Core::Tokens.new( cmd )
  dic = GlooLang::Core::Dictionary.instance
  verb = dic.find_verb( tokens.verb )
  return verb.new( @engine, tokens, params ) if verb

  @engine.log.error "Verb '#{tokens.verb}' was not found."
  return nil
end

#run(cmd) ⇒ Object

Parse a command and then run it if it parsed correctly.



53
54
55
56
# File 'lib/gloo_lang/core/parser.rb', line 53

def run( cmd )
  v = parse_immediate( cmd )
  GlooLang::Exec::Runner.go( @engine, v ) if v
end

#split_params(cmd) ⇒ Object

If additional params were provided, split them out from the token list.



39
40
41
42
43
44
45
46
47
48
# File 'lib/gloo_lang/core/parser.rb', line 39

def split_params( cmd )
  params = nil
  i = cmd.rindex( '(' )
  if i && cmd.strip.end_with?( ')' )
    pstr = cmd[ i + 1..-1 ]
    params = pstr.strip[ 0..-2 ] if pstr
    cmd = cmd[ 0, i - 1 ]
  end
  return cmd, params
end