help-bison
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: How to change default outcome of shift/reduce conflict?


From: Anthony DeRobertis
Subject: Re: How to change default outcome of shift/reduce conflict?
Date: Tue, 15 Jan 2002 16:35:38 -0500

On Tuesday, January 15, 2002, at 09:27 AM, Hans Aberg wrote:

Do you understand you right, that you have not the actual HyperTalk grammar given, but try to fix it up, to your perception of the match the HyperTalk
language?

I would LOVE to have a good grammar for HyperTalk. However, all I've got is two things: First, a book called the Script Language Guide which is a worse source for writing an interpreter than using a "C For Dummies" book would be for writing a C compiler. Second, I have a reference implementation to play with.

So, I have to write my own grammar from the horribly inaccurate book and observations of how HyperCard (the reference implementation) actually works.

So, when I say one way is correct, it's because thats the way HyperCard does it.

Someone has put together a BNF grammar which I'm not sure is legal (at quick glance, it is ambiguous), but even if it weren't I'm not sure of its copyright status and seriously doubt the translation to LALR(1) would be trivial:
        http://www.jaedworks.com/hypercard/scripts/hypertalk-bnf.html


answer_statement: ANSWER expr answer_btn_list
                ...

answer_btn_list: WITH answer_btn_list_oneplus
             | /* empty */

answer_btn_list_oneplus: answer_btn_list_oneplus OR expr
                     | expr     %prec PSEUDO_MAX

expr contains a lot of things, expr OR expr is one of them.

This is what looks wrong to me: That both answer_btn_list_oneplus and expr
contains OR.

Yes, that's correct. They have to -- it means two different things. Compare it to calling a C function where you can certainly do:

answer(a || b, c, d || e).

In HyperTalk "||" becomes "or". Unfortunately, in the case of answer's button list, "," also becomes "or". So:

answer ... with (a or b) or c or (d or e)

The second point is that in order to avoid parsing conflicts in
answer_statement, it should normally have a terminator:
  answer_statement -> ANSWER expr answer_btn_list "."

It does, it's just in statement where it has newline as a terminator. I've clipped a lot of the grammar as it is over 400 lines and growing. Though a lot of that 400 lines is support code and comments.




reply via email to

[Prev in Thread] Current Thread [Next in Thread]