Sha256: 9a1c67d974dff6bf709e7b3d17d40ee4848c2c9cd17e5278bbc71b8986a3e56a

Contents?: true

Size: 1.41 KB

Versions: 6

Compression:

Stored size: 1.41 KB

Contents

# Author::    Eric Crane  (mailto:eric.crane@mac.com)
# Copyright:: Copyright (c) 2019 Eric Crane.  All rights reserved.
#
# The Parser.
# Can parse single line commands or files.
#

module GlooLang
  module Core
    class Parser

      #
      # Set up the parser.
      #
      def initialize
        $log.debug 'parser intialized...'
      end

      #
      # Parse a command from the immediate execution context.
      #
      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( tokens, params ) if verb

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

      #
      # If additional params were provided, split them out
      # from the token list.
      #
      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

      #
      # Parse a command and then run it if it parsed correctly.
      #
      def run( cmd )
        v = parse_immediate( cmd )
        GlooLang::Exec::Runner.go( v ) if v
      end

    end
  end
end

Version data entries

6 entries across 6 versions & 1 rubygems

Version Path
gloo-lang-0.9.8 lib/gloo_lang/core/parser.rb
gloo-lang-0.9.7 lib/gloo_lang/core/parser.rb
gloo-lang-0.9.6 lib/gloo_lang/core/parser.rb
gloo-lang-0.9.5 lib/gloo_lang/core/parser.rb
gloo-lang-0.9.4 lib/gloo_lang/core/parser.rb
gloo-lang-0.9.3 lib/gloo_lang/core/parser.rb