Skip to content

ParserATNSimulator debug crash on Python3 target #2291

@sinopsysHK

Description

@sinopsysHK

Running Grammars-v4/plsql generated parser and putting ParserATNSimulator in debug mode as bellow is crashing when running over simple SQL script:

SELECT * FROM TAB1 T1, TAB2 T2 WHERE T1.F1=T2.F1;
""" sample code """
import sys
from antlr4 import *
from antlr4.tree.Tree import TerminalNode
from myparser.PlSqlLexer import PlSqlLexer
from myparser.PlSqlParser import PlSqlParser
from myparser.PlSqlParserVisitor import PlSqlParserVisitor

class UpperFileStream(FileStream):
    def readDataFrom(self, fileName: str, encoding: str, errors: str = 'strict'):
        return super().readDataFrom(fileName, encoding, errors).upper()

ParserATNSimulator.debug = True
input = UpperFileStream(sys.argv[1])
input = FileStream(argv[1])
lexer = PlSqlLexer(input)
stream = CommonTokenStream(lexer)
parser = PlSqlParser(stream)
tree = parser.sql_script()_

with following stack trace:

  File "C:\Users\ericb_000\Documents\devs\langparser\src\myparser\PlSqlParser.py", line 12717, in unit_statement
    self.data_manipulation_language_statements()
  File "C:\Users\ericb_000\Documents\devs\langparser\src\myparser\PlSqlParser.py", line 63851, in data_manipulation_language_statements
    self.select_statement()
  File "C:\Users\ericb_000\Documents\devs\langparser\src\myparser\PlSqlParser.py", line 65257, in select_statement
    self.subquery()
  File "C:\Users\ericb_000\Documents\devs\langparser\src\myparser\PlSqlParser.py", line 65803, in subquery
    self.subquery_basic_elements()
  File "C:\Users\ericb_000\Documents\devs\langparser\src\myparser\PlSqlParser.py", line 65868, in subquery_basic_elements
    self.query_block()
  File "C:\Users\ericb_000\Documents\devs\langparser\src\myparser\PlSqlParser.py", line 66112, in query_block
    la_ = self._interp.adaptivePredict(self._input,1253,self._ctx)
  File "C:\ProgramData\Anaconda3\lib\site-packages\antlr4\atn\ParserATNSimulator.py", line 342, in adaptivePredict
    alt = self.execATN(dfa, s0, input, index, outerContext)
  File "C:\ProgramData\Anaconda3\lib\site-packages\antlr4\atn\ParserATNSimulator.py", line 442, in execATN
    alt = self.execATNWithFullContext(dfa, D, s0_closure, input, startIndex, outerContext)
  File "C:\ProgramData\Anaconda3\lib\site-packages\antlr4\atn\ParserATNSimulator.py", line 625, in execATNWithFullContext
    self.reportContextSensitivity(dfa, predictedAlt, reach, startIndex, input.index)
  File "C:\ProgramData\Anaconda3\lib\site-packages\antlr4\atn\ParserATNSimulator.py", line 1621, in reportContextSensitivity
    ", input=" + self.parser.getTokenStream().getText(interval))
  File "C:\ProgramData\Anaconda3\lib\site-packages\antlr4\BufferedTokenStream.py", line 283, in getText
    stop = interval[1]
IndexError: range object index out of range

I know that this is a limited issue but I wanted to use debug mode to investigate why this simple sql script takes more than a minute to parse in Python3 while it takes seconds with Java target.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions