[#10209] Market for XML Web stuff — Matt Sergeant <matt@...>

I'm trying to get a handle on what the size of the market for AxKit would be

15 messages 2001/02/01

[#10238] RFC: RubyVM (long) — Robert Feldt <feldt@...>

Hi,

20 messages 2001/02/01
[#10364] Re: RFC: RubyVM (long) — Mathieu Bouchard <matju@...> 2001/02/05

[#10708] Suggestion for threading model — Stephen White <spwhite@...>

I've been playing around with multi-threading. I notice that there are

11 messages 2001/02/11

[#10853] Re: RubyChangeRequest #U002: new proper name for Hash#indexes, Array#indexes — "Mike Wilson" <wmwilson01@...>

10 messages 2001/02/14

[#11037] to_s and << — "Brent Rowland" <tarod@...>

list = [1, 2.3, 'four', false]

15 messages 2001/02/18

[#11094] Re: Summary: RCR #U002 - proper new name fo r indexes — Aleksi Niemel<aleksi.niemela@...>

> On Mon, 19 Feb 2001, Yukihiro Matsumoto wrote:

12 messages 2001/02/19

[#11131] Re: Summary: RCR #U002 - proper new name fo r indexes — "Conrad Schneiker" <schneik@...>

Robert Feldt wrote:

10 messages 2001/02/19

[#11251] Programming Ruby is now online — Dave Thomas <Dave@...>

36 messages 2001/02/21

[#11469] XML-RPC and KDE — schuerig@... (Michael Schuerig)

23 messages 2001/02/24
[#11490] Re: XML-RPC and KDE — schuerig@... (Michael Schuerig) 2001/02/24

Michael Neumann <neumann@s-direktnet.de> wrote:

[#11491] Negative Reviews for Ruby and Programming Ruby — Jim Freeze <jim@...> 2001/02/24

Hi all:

[#11633] RCR: shortcut for instance variable initialization — Dave Thomas <Dave@...>

13 messages 2001/02/26

[#11652] RE: RCR: shortcut for instance variable initialization — Michael Davis <mdavis@...>

I like it!

14 messages 2001/02/27

[#11700] Starting Once Again — Ron Jeffries <ronjeffries@...>

OK, I'm starting again with Ruby. I'm just assuming that I've

31 messages 2001/02/27
[#11712] RE: Starting Once Again — "Aaron Hinni" <aaron@...> 2001/02/27

> 2. So far I think running under TextPad will be better than running

[#11726] Re: Starting Once Again — Aleksi Niemel<zak@...> 2001/02/28

On Wed, 28 Feb 2001, Aaron Hinni wrote:

[ruby-talk:10374] Re: Nested modules and classes?

From: "Ben Tilly" <ben_tilly@...>
Date: 2001-02-05 16:14:47 UTC
List: ruby-talk #10374
Aleksi Niemel<zak@ale.cx> wrote:
>
>On Sun, 4 Feb 2001, Guy N. Hurst wrote:
>
> > "Hal E. Fulton" wrote:
> > > ...
> > > Also, I don't really remember seeing any discussion
> > > here of nested classes... though apparently they
> > > exist. Are they ever Really Useful or just a mild
> > > curiosity?
> > >
> >
> > I have not yet seen an answer to this question, and
> > I am also interested in understanding this.
> >
> > I find nested modules and nested classes,
> > as well as nested classes inside nested modules.
> >
> > Nowhere have I seen this documented, yet I see it
> > used.  What is the scoop?
>
>Nested modules are definitely useful as nested namespaces.
>
>Nested classes are not that useful in my experience. In Java you would
>use them for a substitute for blocks (procs) or (not so) anonymous
>routines. In Ruby they could be used in a same way, but as we have
>blocks already there's hardly any need for them used in that way.

Cool, Ruby does this?  I have a good use for using nested
classes right now in a learning project I am doing!

>There's good use for nested classes. If you need a class carrying some
>data and methods, but feel that it's not important enough for the
>others to use or know about it, it might be beneficial to "localize"
>the definition, thus place it inside and near the code which uses it.
>
>     - Aleksi
>
>
>   module MyPackage
>
>     module InnerPackage
>
>       class TheWorker
>
>         def initialize(foo)
>           @foo = WorkersHelper.new(foo)
>         end
>
>         def foo
>           @foo.calculate
>         end
>
>         class WorkersHelper
>           def initialize(value)
>             @value = value
>           end
>           def calculate
>             @value ** 2
>           end
>         end
>       end
>     end
>   end
>
>   puts MyPackage::InnerPackage::TheWorker.new(10).foo
>
Real life example of another valid use.

One parsing technique is recursive descent.  The key
difference between recursive descent and the lex
approach is that you try out alternative rules in
order (recursive descent) rather than in parallel.
(Quite similar, not surprisingly, to the difference
between an NFA and a DFA.)

So suppose we want a class for a parser that parses
text using RecDescent.  Within our grammar we will
have many rules (named and unnamed) of specific
forms.  For instance, "Try these rules in order."
"Match a token."  "Match these rules in turn."
"Match this rule 0 or more times."  And so on.

Well with the above technique I can easily do the
following:

    class RecDescent

      # Try these rules in order
      class Alt
        atr_accessor :rules

        def initialize (*rules)
          @rules = rules
        end

        def parse (str, pos=0)
          for rule in rules
            out, next_pos = rule.parse str, pos
            if not out.nil?
              return out, next_pos
            end
          end
          return nil, nil
        end
      end

      # Match all rules in turn
      class InOrder
        atr_accessor :rules

        def initialize (*rules)
          @rules = rules
        end

        def parse (str, pos=0)
          output = ''
          for rule in rules
            out, next_pos = rule.parse str, pos
            if out.nil?
              return nil, nil
            else
              output << out
              pos = next_pos
            end
          end
          return output, pos
        end
      end


      # And so on, more classes for each type of rule

    end

Each rule is now an object, and each type of rule is
a class.  Now you can build a parser for a complex
grammar by combining objects from its private classes
in the right way.  Classes which it needs but the
outside world should not care about.

Of course right now what I have doesn't do this, nor am
I trying to get there right now.  I just have a
collection of different types of rules, and I am
trying to use them in a configurable interface that
creates a highly specialized processor for scanning a
slightly marked up HTML document, passes through strictly
checked html (eg only specified tags, for each tag only
specified attributes), reports errors, has room for
custom escapes, etc, and then just does a standard html
escape for everything it doesn't have specific rules for.
Appropriate for use in a web bulletin board.

But anyways, nested class definitions will *definitely*
be the right way to hide away all of these private
classes which are required in the internals of my
parser...

Cheers,
Ben
_________________________________________________________________
Get your FREE download of MSN Explorer at http://explorer.msn.com

In This Thread

Prev Next