What I had in mind is really no different from the stateful lexer
previously proposed. Unless I'm mistaken, an abstract model might be a
language over {0, 1, 2} where each 1 or 2 must be prececed by a run of
1 or more 0's, but each run differ in length from the preceding one by
0, 1 or -1. But that's only a local constraint. You also also want to
eventually get back to a run of 1 as the string ends (You don't want
the program to end in the middle of a nested block.) So, maybe a single
register would work locally (so long as transitions can be conditioned
on its value), but you still need a stack for global correctness.
--- Larry Wall <[EMAIL PROTECTED]> wrote:
> On Thu, Sep 08, 2005 at 02:16:33PM -0700, Greg Woodhouse wrote:
> : In the case of the
> : "indentation grammar", then the (one) stack in a push-down
> automaton is
> : basically used up keeping track of the indentation level. But you
> don't
> : need a whole stack to keep track of indntation level, just a
> register
> : that can be used to track the current level.
>
> It seems to me you need a stack of levels so you know how many
> indentation levels to pop off. Otherwise you can't parse this:
>
> if foo1
> bar1
> if foo2
> bar2
> if foo3
> bar3
> else
> baz2
>
> Larry
>
===
Gregory Woodhouse <[EMAIL PROTECTED]>
"Without the requirement of mathematical aesthetics a great many discoveries
would not have been made."
-- Albert Einstein