21 Feb 2003 00:45:37 -0500

Related articles |
---|

LR(1) Confusion... seldilotr@hotmail.com (2003-02-21) |

From: | seldilotr@hotmail.com (EldiLoTR) |

Newsgroups: | comp.compilers |

Date: | 21 Feb 2003 00:45:37 -0500 |

Organization: | http://groups.google.com/ |

Keywords: | LR(1), parse, question |

Posted-Date: | 21 Feb 2003 00:45:37 EST |

Hi All,

I'm working on an LR(1) parser generator and I have several questions.

1. Do you know of any good C/C++ LR(1) parser generator out there?

I've scanned the net but couldn't find any. Also, a simple LR(1)

binary would also be good for testing my own source.

2. I have an example which seems very odd; The book does have several

mistakes so I presume that this is yet another one, but since I don't

have too MANY examples, I can't really be sure that my implementation

is correct. The example goes like that -

S->E$

E->T+E

E->T

E->x

T->x

------------

Closure(I0) comes out (in the example) like that:

S->.E$ ?

E->.T+E $

E->.T $

E->.x +

E->.x $

And in my application it comes out like that:

S->.E$ $

E->.T+E $

E->.T $

E->.x $

T->.x +

T->.x $

Now, I passed on the algorithm and I don't understand how can it be

that the example doesn't contain, for example {T->.x,+}. As I

understood it, the algorithm carries on with its search until no more

changes occur - and if you take E->.T+E and test it, you get Beta as

"+", of which First("+")="+" since it's terminal, and there you have

the (T->.x,+).

Can someone please explain?

Thanks a lot!

Post a followup to this message

Return to the
comp.compilers page.

Search the
comp.compilers archives again.