From: Michael Judge Date: 2006-02-02T09:57:25+09:00 Subject: Grammars (mini-scripting languages) I'm working on implementing mini-scripting languages for two different projects, so I'm building a framework that could handle the task generically. Does this seem like a good way to approach it? 1. Store each command's matching regular expression and ruby code within the database. (sample fixture below) 2. For each line in script: Test line against each command's corresponding regular expression If matched, execute the command's ruby code using an instance_eval. My thoughts are: 1. Storing executable code in the database is a security problem 2. instance_eval is slow 3. The alternative (a big if/elsif tree) would span many pages and be unweildy. Have a better suggestion? Sample code: def compile syntax.each do |line| command = commands.find { |c| c.match? line } raise "Command not found that can process '#{line}'" if command.nil? instance_eval command.ruby end end Sample commands fixture: label: id: 1 name: label regexp: ^Q (.*)$ ruby: puts "$1\n" single-punch: id: 2 name: single-punch regexp: ^X-(\d+) (.*)$ ruby: puts " o $2\n" multiple-punch: id: 3 name: multiple-punch regexp: ^M-(\d+) (.*)$ ruby: puts " [ ] $2\n" blank-line: id: 4 name: blank-line regexp: ^\s*$ ruby: # Do nothing -- Posted via http://www.ruby-forum.com/.