Related articles |
---|
Parsing implicit operators with recursive descent? johann@myrkraverk.com (Johann 'Myrkraverk' Oskarsson) (2009-02-06) |
Re: Parsing implicit operators with recursive descent? mailbox@dmitry-kazakov.de (Dmitry A. Kazakov) (2009-02-07) |
Re: Parsing implicit operators with recursive descent? armelasselin@hotmail.com (Armel) (2009-02-07) |
Re: Parsing implicit operators with recursive descent? torbenm@pc-003.diku.dk (2009-02-09) |
Re: Parsing implicit operators with recursive descent? barry.j.kelly@gmail.com (Barry Kelly) (2009-02-12) |
Re: Parsing implicit operators with recursive descent? johann@myrkraverk.com (Johann 'Myrkraverk' Oskarsson) (2010-01-30) |
Re: Parsing implicit operators with recursive descent? kkylheku@gmail.com (Kaz Kylheku) (2010-02-01) |
From: | "Dmitry A. Kazakov" <mailbox@dmitry-kazakov.de> |
Newsgroups: | comp.compilers |
Date: | Sat, 7 Feb 2009 16:47:48 +0100 |
Organization: | cbb software GmbH |
References: | 09-02-013 |
Keywords: | parse, LL(1) |
Posted-Date: | 07 Feb 2009 12:56:34 EST |
On Fri, 06 Feb 2009 02:34:56 +0000, Johann 'Myrkraverk' Oskarsson wrote:
> That is, to be explicit, is it possible to make a recursive descent
> parser that produces (*) the following parse tree on this input "aab":
>
> @
> / \
> @ b
> / \
> a a
>
> Where @ is the implicit concatenation operator?
Yes, it is possible. There are two techniques I m using:
1. When a table of tokens expected in the infix operation context does not
match the input, a "missing operation" handler is called. This handler
emulates some default operation. It can be "multiply" or "catenation" as in
the case of pattern expressions.
2. Simply put an empty token into the table of infix operations (*). This
approach is straightforward, but it will require "missing operand" handler
that would discard always matched empty token when that was recognized at
the expression end. Usually I have also some context check that verifies
matched tokens not to break some rules. For example "ab" is not accepted
when found in "abcdef," but accepted when found in "ab(1)" etc. Such checks
can be deployed here to avoid empty token match at the expression end.
--------------------------------------
* I do not tokenize the source, this makes dealing things like empty tokens
a lot easier. Token tables are matched directly against the source.
--
Regards,
Dmitry A. Kazakov
http://www.dmitry-kazakov.de
Return to the
comp.compilers page.
Search the
comp.compilers archives again.