igordejanovic / parglare

A pure Python LR/GLR parser - http://www.igordejanovic.net/parglare/
MIT License
136 stars 32 forks source link

EMPTY right before EOF #72

Closed SupraSummus closed 4 years ago

SupraSummus commented 5 years ago

Description

Building parser for grammar s: EMPTY EOF; throws non-informative error.

(I know this is a very corner case but I'll report issue anyway to indicate it.)

What I Did

import parglare

grammar = parglare.Grammar.from_string('s: EMPTY EOF;')
parser = parglare.Parser(grammar)

Listed program results in an error

Traceback (most recent call last):
  File "test.py", line 4, in <module>
    parser = parglare.Parser(grammar)
  File "/home/jan/programowanie/parglare/parglare/parser.py", line 86, in __init__
    in_layout=self.in_layout)
  File "/home/jan/programowanie/parglare/parglare/tables/__init__.py", line 83, in create_load_table
    prefer_shifts, prefer_shifts_over_empty)
  File "/home/jan/programowanie/parglare/parglare/tables/__init__.py", line 175, in create_table
    idx = states.index(maybe_new_state)
  File "/home/jan/programowanie/parglare/parglare/tables/__init__.py", line 648, in __eq__
    other_kernel = [x for x in other.items if x.is_kernel]
  File "/home/jan/programowanie/parglare/parglare/tables/__init__.py", line 648, in <listcomp>
    other_kernel = [x for x in other.items if x.is_kernel]
AttributeError: 'NoneType' object has no attribute 'is_kernel'
igordejanovic commented 5 years ago

Indeed a corner case but bug anyway. Thanks for reporting.

igordejanovic commented 4 years ago

Obsoleted by EOF removal