Sha256: 97d2581f82db5d8ce230de542fb280bb21b1adcea39ae7e030d4ed9716b82a91

Contents?: true

Size: 1.3 KB

Versions: 5

Compression:

Stored size: 1.3 KB

Contents

# Clean this up.  Have it assume there's an install?
$LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
$LOAD_PATH.unshift(File.dirname(__FILE__))

require "panini"

grammar = Panini::Grammar.new


# ================
# = Nonterminals =
# ================
expression = grammar.add_nonterminal("EXPR")
term = grammar.add_nonterminal("TERM")
factor = grammar.add_nonterminal("FACT")
identifier = grammar.add_nonterminal("ID")
number = grammar.add_nonterminal("NUM")


# =============
# = Terminals =
# =============
expression.add_production([term, '+', term])
expression.add_production([term, '-', term])
expression.add_production([term])

term.add_production([factor, '*', term])
term.add_production([factor, '/', term])
term.add_production([factor])

factor.add_production([identifier])
factor.add_production([number])
factor.add_production(['(', expression, ')'])

('a'..'z').each do |v|
  identifier.add_production([v])
end

# It would be cool to have a way to create a random number.
(0..100).each do |n|
  number.add_production([n])
end


# ===============================================
# = Choose a strategy and create some sentences =
# ===============================================
deriver = Panini::DerivationStrategy::RandomDampened.new(grammar)
10.times do
  puts "#{deriver.sentence.join(' ')}"
end

Version data entries

5 entries across 5 versions & 1 rubygems

Version Path
panini-1.3.0 examples/arithmetic_expression.rb
panini-1.2.0 examples/arithmetic_expression.rb
panini-1.1.1 examples/arithmetic_expression.rb
panini-1.1.0 examples/arithmetic_expression.rb
panini-1.0.0 examples/arithmetic_expression.rb