[Tutor] bracket issue

Palm Tree timeofsands at gmail.com
Mon Apr 17 00:48:33 EDT 2017


---------- Forwarded message ----------
From: "Palm Tree" <timeofsands at gmail.com>
Date: 16 Apr 2017 10:07
Subject: Re: [Tutor] bracket issue
To: "Peter Otten" <__peter__ at web.de>
Cc:

Ok thanks for the answers. Perfect.

Just to clarify why i wanted recursion was that well coming to compiler
theory, i created a python-based language called newB

it allows you to define your own keywords but don't abuse

like you can configure if to cheese

cheese x == 4:

coming to recursion well i currently use eval() so everything ok i don't
have to worry about brackets but i want to write my own parser. a top down
parser for expressions.

you can also view the lang here:
http://wp.me/p7UB6x-oV

thanks for the answers once more

On 15 Apr 2017 18:46, "Peter Otten" <__peter__ at web.de> wrote:

> Palm Tree wrote:
>
> > hi all. i'm trying to write a simple program. i'm using python 3.4
> >
> > let us say i have
> >
> > s="2*3+3(8-4(5+6+9))+2+3+3(4/4)"
> >
> > i want to find expression enclosed in brackets.
> >
> > i want outputs to be like:
> > (8-4(5+6+9))
> > (5+6+9)
> > (4/4)
> > note : i'd like an answer involving recursion if possible
>
> No recursion, but a stack managed manually:
>
> >>> s = "2*3+3(8-4(5+6+9))+2+3+3(4/4)"
> >>> stack = []
> >>> for i, c in enumerate(s):
> ...     if c == "(":
> ...         stack.append(i)
> ...     elif c == ")":
> ...         print(s[stack.pop():i+1])
> ...
> (5+6+9)
> (8-4(5+6+9))
> (4/4)
>
> The order is determined by the closing parenthesis, you could sort if you
> don't want that.
>
> I did not find a convincing translation using recursion, but I'll give one
> anyway:
>
> def find_closing(s):
>     i = c = None
>     pairs = enumerate(s)
>     def step(start=None):
>         nonlocal i, c
>         for i, c in pairs:
>             if c == "(":
>                 step(i)
>             elif c == ")":
>                 if start is not None:
>                     print(s[start:i+1])
>                 return
>     step()
>
> _______________________________________________
> Tutor maillist  -  Tutor at python.org
> To unsubscribe or change subscription options:
> https://mail.python.org/mailman/listinfo/tutor
>


More information about the Tutor mailing list