Coder Social home page Coder Social logo

adelaide's Introduction

Run:

# If you don't already have it
rbx gem install kpeg

rbx -S kpeg -f adelaide.kpeg &&
  rbx -rubygems ./test.rb test.rb

test.rb looks like this:

module Adelaide; end

require 'adelaide.kpeg.rb'

pp = Adelaide::Parser.new(ARGF.read.chomp)
unless pp.parse
  pp.show_error(STDERR)
  pp.raise_error
end

Rubinius::AST::AsciiGrapher.new(pp.ast, Adelaide::Parser::AST::Node).print

That will output the following AST:

Root
  @value: \
    Module
      @name: \
      ConstantAccess
        @name: "Adelaide"
      @body: \
      Body
        @stmts: \
        @rescue_: \
        @else_: nil
        @ensure_: nil
    LocalSend
      @name: "require"
      @args: \
        String
          @value: "adelaide.kpeg.rb"
      @block: nil
    Assign
      @lhs: \
      VariableAccess
        @name: "pp"
      @rhs: \
      ObjSend
        @name: "new"
        @args: \
          ObjSend
            @name: "chomp"
            @args: \
            @block: nil
            @target: \
            ObjSend
              @name: "read"
              @args: \
              @block: nil
              @target: \
              ConstantAccess
                @name: "ARGF"
        @block: nil
        @target: \
        ScopedConstant
          @name: "Parser"
          @parent: \
          ConstantAccess
            @name: "Adelaide"
    Unless
      @true_value: \
        ObjSend
          @name: "show_error"
          @args: \
            ConstantAccess
              @name: "STDERR"
          @block: nil
          @target: \
          VariableAccess
            @name: "pp"
        ObjSend
          @name: "raise_error"
          @args: \
          @block: nil
          @target: \
          VariableAccess
            @name: "pp"
      @false_value: nil
      @cond: \
      ObjSend
        @name: "parse"
        @args: \
        @block: nil
        @target: \
        VariableAccess
          @name: "pp"
    ObjSend
      @name: "print"
      @args: \
      @block: nil
      @target: \
      ObjSend
        @name: "new"
        @args: \
          ObjSend
            @name: "ast"
            @args: \
            @block: nil
            @target: \
            VariableAccess
              @name: "pp"
          ScopedConstant
            @name: "Node"
            @parent: \
            ScopedConstant
              @name: "AST"
              @parent: \
              ScopedConstant
                @name: "Parser"
                @parent: \
                ConstantAccess
                  @name: "Adelaide"
        @block: nil
        @target: \
        ScopedConstant
          @name: "AsciiGrapher"
          @parent: \
          ScopedConstant
            @name: "AST"
            @parent: \
            ConstantAccess
              @name: "Rubinius"

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.