cwbaker / lalr

LALR(1) parser for C++
MIT License
78 stars 11 forks source link

How to produce an output similar to bison/byacc for debugging ? #51

Open mingodad opened 1 year ago

mingodad commented 1 year ago

The error messages from lalr for shift/reduce and reduce/reduce conflicts are a bit dry. How to produce an output similar to the ones bison/byacc produce when specifying -v ?

byacc:

...
state 8
    lines : lines line *  (2)

    .  reduce 2

9: shift/reduce conflict (shift 20, reduce 16 [vexp]) on '+'
9: shift/reduce conflict (shift 21, reduce 16 [vexp]) on '-'
9: shift/reduce conflict (shift 22, reduce 16 [vexp]) on '*'
9: shift/reduce conflict (shift 23, reduce 16 [vexp]) on '/'
9: shift/reduce conflict (shift 24, reduce 16 [vexp]) on '\n'
state 9
    line : dexp * '\n'  (3)
    dexp : dexp * '+' dexp  (10)
    dexp : dexp * '-' dexp  (11)
    dexp : dexp * '*' dexp  (12)
    dexp : dexp * '/' dexp  (13)
    vexp : dexp *  (16)
    vexp : dexp * '+' vexp  (20)
    vexp : dexp * '-' vexp  (22)
    vexp : dexp * '*' vexp  (24)
    vexp : dexp * '/' vexp  (26)

    '+'  shift 20
    '-'  shift 21
    '*'  shift 22
    '/'  shift 23
    '\n'  shift 24

state 10
...

bison:

...
State 9

    2 lines: lines line •

    $default  reduce using rule 2 (lines)

State 10

    3 line: dexp • '\n'
   10 dexp: dexp • '+' dexp
   11     | dexp • '-' dexp
   12     | dexp • '*' dexp
   13     | dexp • '/' dexp
   16 vexp: dexp •
   20     | dexp • '+' vexp
   22     | dexp • '-' vexp
   24     | dexp • '*' vexp
   26     | dexp • '/' vexp

    '+'   shift, and go to state 21
    '-'   shift, and go to state 22
    '*'   shift, and go to state 23
    '/'   shift, and go to state 24
    '\n'  shift, and go to state 25

    '+'   [reduce using rule 16 (vexp)]
    '-'   [reduce using rule 16 (vexp)]
    '*'   [reduce using rule 16 (vexp)]
    '/'   [reduce using rule 16 (vexp)]
    '\n'  [reduce using rule 16 (vexp)]

State 11
...