I. Introduction
In recent years, software engineering has witnessed a remarkable surge in the utilization of software applications across various domains, including the rapidly evolving field of embedded systems and healthcare, etc. Within software engineering, one of the core aspects is developing, analyzing, and customizing programming languages [1] . These activities often involve parsing. Parsing refers to analyzing the source code’s structure based on a given set of rules or grammar [2] . Parsers are created manually or by parser generators. They use a lexer, also known as a lexical analyzer, to identify the terminal symbols of a specified language, breaking it down into smaller units such as tokens or abstract syntax trees (ASTs) and verifying that they conform to the language’s syntax and semantics [3] . Parsing involves several sub-tasks performed sequentially or in parallel, depending on the algorithm. The first three tasks in Fig. 1 represent the main sub-tasks of parsing: lexical analysis, syntactic analysis, and semantic analysis [4] .