# Kanocc 0.2.0

**URL:** <https://www.ruby-forum.com/t/kanocc-0-2-0/185467>\
**Category:** Ruby\
**Created:** [March 20, 2010, 7:39pm UTC](https://www.ruby-forum.com/t/kanocc-0-2-0/185467 "2010-03-20T19:39:06Z")\
**Posts on this page:** 4\
**Page:** 1

<div class="post-metadata">

**Author:** ![caefer](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/c/e36b37/32.png) [@caefer](https://www.ruby-forum.com/u/caefer)\
**Post date:** [March 20, 2010, 7:39pm UTC](https://www.ruby-forum.com/t/kanocc-0-2-0/185467/1 "2010-03-20T19:39:06Z")

</div>

Kanocc (Kanocc Ain’t NO Compiler-Compiler) 0.2.0 is released.

(Actually it was released a few months ago, but it only recently  
occurred to  
me that I could/should announce i here. Sorry…)

What is it: Kanocc is a syntax recognition framework for Ruby. It  
emphasizes  
seamless integration with Ruby, utilizing Ruby’s flexible syntax.

Kanocc is available as a gem.

Visit [http://kanocc.rubyforge.org](http://kanocc.rubyforge.org) to find documentation and downloads.

To get a little taste of Kanocc, here’s an example: An interpreter for  
simple arithmetic expressions could be done like this:

require “rubygems”  
require “kanocc”

class Number \< Kanocc::Token  
attr\_reader :val  
pattern(/\d+/) { @val = @m[0].to\_i}  
end

class Expr \< Kanocc::Nonterminal  
attr\_reader :val

rule(Expr, “+”, Expr) { @val = @rhs[0].val + @rhs[2].val}  
rule(Expr, “-”, Expr) { @val = @rhs[0].val - @rhs[2].val}  
rule(Expr, “\*”, Expr) { @val = @rhs[0].val \* @rhs[2].val}; precedence  
-1  
rule(Expr, “/”, Expr) { @val = @rhs[0].val / @rhs[2].val}; precedence  
-1  
rule(“(”, Expr, “)”) { @val = @rhs[1].val}  
rule(Number) {@val = @rhs[0].val}  
end

myParser = Kanocc::Kanocc.new(Expr)

puts myParser.parse(‘3 + 4 - 2’).val  
puts myParser.parse(‘8 - 2 \* 3’).val  
puts myParser.parse(‘8 - (4 - 2)’).val

If this doesn’t make any sense at all, you may have to read the  
documentation 🙂

Feedback is most welcome.

br. Christian S…

---

<div class="post-metadata">

**Author:** ![caefer](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/c/e36b37/32.png) [@caefer](https://www.ruby-forum.com/u/caefer)\
**Post date:** [March 20, 2010, 8:27pm UTC](https://www.ruby-forum.com/t/kanocc-0-2-0/185467/2 "2010-03-20T20:27:06Z")

</div>

> What is it: Kanocc is a syntax recognition framework for Ruby. It emphasizes  
> seamless integration with Ruby, utilizing Ruby’s flexible syntax.  
> How is Kanocc different from Treetop?  
> I saw a presentation by the creator showing how to implement a  
> parser/interpretor for arithmetic with the Treetop gem. Why use any one  
> over the other?

- Ehsan

---

<div class="post-metadata">

**Author:** ![caefer](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/c/e36b37/32.png) [@caefer](https://www.ruby-forum.com/u/caefer)\
**Post date:** [March 21, 2010, 9:30am UTC](https://www.ruby-forum.com/t/kanocc-0-2-0/185467/3 "2010-03-21T09:30:16Z")

</div>

Well, actually I didn’t know about Treetop. It looks very nice. I’ll  
have a  
look at it.

br. Christian S.

2010/3/21 Tomo K. [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid)

---

<div class="post-metadata">

**Author:** ![caefer](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/c/e36b37/32.png) [@caefer](https://www.ruby-forum.com/u/caefer)\
**Post date:** [March 21, 2010, 3:33am UTC](https://www.ruby-forum.com/t/kanocc-0-2-0/185467/4 "2010-03-21T03:33:15Z")

</div>

Kanocc uses Earley parsing algorithm, while Treetop uses PEGs.
