Class: BabelBridge::Shell
- Inherits:
-
Object
- Object
- BabelBridge::Shell
- Defined in:
- lib/babel_bridge/shell.rb
Instance Attribute Summary collapse
-
#parser ⇒ Object
Returns the value of attribute parser.
Instance Method Summary collapse
- #errputs(str) ⇒ Object
-
#evaluate(parse_tree_node, &block) ⇒ Object
Providing a block overrides all evaluate behavor and simply: yield parse_tree_node, self elsif parse_tree_node responds to “evaluate”: puts_result parse_tree_node.evaluate else pretty-print the parse-tree rescue and pretty-print errors.
-
#initialize(parser) ⇒ Shell
constructor
A new instance of Shell.
- #pretty_print_parse_tree(parse_tree_node) ⇒ Object
- #puts(str) ⇒ Object
- #puts_result(str) ⇒ Object
-
#start(options = {}, &block) ⇒ Object
Each line of input is parsed.
Constructor Details
#initialize(parser) ⇒ Shell
Returns a new instance of Shell.
6 7 8 |
# File 'lib/babel_bridge/shell.rb', line 6 def initialize(parser) @parser = parser end |
Instance Attribute Details
#parser ⇒ Object
Returns the value of attribute parser.
5 6 7 |
# File 'lib/babel_bridge/shell.rb', line 5 def parser @parser end |
Instance Method Details
#errputs(str) ⇒ Object
39 40 41 |
# File 'lib/babel_bridge/shell.rb', line 39 def errputs(str) @stderr.puts str end |
#evaluate(parse_tree_node, &block) ⇒ Object
Providing a block overrides all evaluate behavor and simply: yield parse_tree_node, self elsif parse_tree_node responds to “evaluate”: puts_result parse_tree_node.evaluate else pretty-print the parse-tree rescue and pretty-print errors
18 19 20 21 22 23 24 25 26 27 28 29 |
# File 'lib/babel_bridge/shell.rb', line 18 def evaluate(parse_tree_node, &block) if block yield parse_tree_node, self elsif parse_tree_node.respond_to? :evaluate puts_result parse_tree_node.evaluate else pretty_print_parse_tree parse_tree_node end rescue Exception => e errputs "Error evaluating parse tree: #{e}\n" + ["Backtrace:",e.backtrace].flatten.join("\n ") pretty_print_parse_tree parse_tree_node end |
#pretty_print_parse_tree(parse_tree_node) ⇒ Object
10 11 12 |
# File 'lib/babel_bridge/shell.rb', line 10 def pretty_print_parse_tree(parse_tree_node) puts "\nParse tree:\n #{parse_tree_node.inspect.gsub("\n","\n ")}\n\n" end |
#puts(str) ⇒ Object
31 32 33 |
# File 'lib/babel_bridge/shell.rb', line 31 def puts(str) @stdout.puts str end |
#puts_result(str) ⇒ Object
35 36 37 |
# File 'lib/babel_bridge/shell.rb', line 35 def puts_result(str) @stdout.puts " => "+str.inspect end |
#start(options = {}, &block) ⇒ Object
Each line of input is parsed. If parser fails, output explaination of why. If parser succeeds, evaluate parse_tree_node, &block
46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 |
# File 'lib/babel_bridge/shell.rb', line 46 def start(={},&block) @stdout = [:stdout] || $stdout @stderr = [:stdout] || @stdout @stdin = [:stdin] || $stdin while line = @stdin == $stdin ? Readline.readline("> ", true) : @stdin.gets line.strip! next if line.length==0 parse_tree_node = parser.parse line if parse_tree_node evaluate parse_tree_node, &block else errputs parser.parser_failure_info :verbose => true end end end |