Hello Veer,
I think the conflict may be here(I may be wrong) : When parser encounter C , it can reduce to y or it can shift i.e it think there is A waiting to be read, hence shift/reduce conflict
Thanks. I think you are right: while this grammar is not ambiguous per se, it confuses LALR parser. I should have educated myself on the subject earlier: http://www.cs.man.ac.uk/~pjj/cs212/ho/node7.html So to make that conflict gone, I had to convert my grammar to something like (x ((C A B) 'cab)) ((C A A B) 'caab))) Best regards, Dmitry
On Mon, Jan 16, 2012 at 2:49 PM, Dmitry Pavlov <dpav...@ipa.nw.ru <mailto:dpav...@ipa.nw.ru>> wrote: Hello all, I am having trouble with yacc parser giving shift/reduce conflict, while I do not see where the conflict can be. I have simplified the grammar to the following one: #lang racket (require parser-tools/yacc parser-tools/lex) (define-empty-tokens my-tokens (EOF A B C)) (define (my-parser source-name) (parser (start start) (end EOF) (tokens my-tokens) (error #f) (grammar (start ((x) $1)) (x ((y A B) (list $1 'ab))) (y ((C) 'c) ((C A) 'ca))))) It reports "1 shift/reduce conflict". But from my primitive point of view, the parser should accept only "CAB" and "CAAB" inputs, so there is no chance for a conflict here. Could please anybody point me on what is not correct with my understanding? Best regards, Dmitry ____________________ Racket Users list: http://lists.racket-lang.org/__users <http://lists.racket-lang.org/users>
____________________ Racket Users list: http://lists.racket-lang.org/users