1 research outputs found
Block-Level Parallelism in Parsing Block Structured Languages
Softwares source code is becoming large and complex. Compilation of large
base code is a time consuming process. Parallel compilation of code will help
in reducing the time complexity. Parsing is one of the phases in compiler in
which significant amount of time of compilation is spent. Techniques have
already been developed to extract the parallelism available in parser. Current
LR(k) parallel parsing techniques either face difficulty in creating Abstract
Syntax Tree or requires modification in the grammar or are specific to less
expressive grammars. Most of the programming languages like C, ALGOL are
block-structured, and in most languages grammars the grammar of different
blocks is independent, allowing different blocks to be parsed in parallel. We
are proposing a block level parallel parser derived from Incremental Jump Shift
Reduce Parser by [13]. Block Parallelized Parser (BPP) can even work as a block
parallel incremental parser. We define a set of Incremental Categories and
create the partitions of a grammar based on a rule. When parser reaches the
start of the block symbol it will check whether the current block is related to
any incremental category. If block parallel parser find the incremental
category for it, parser will parse the block in parallel. Block parallel parser
is developed for LR(1) grammar. Without making major changes in Shift Reduce
(SR) LR(1) parsing algorithm, block parallel parser can create an Abstract
Syntax tree easily. We believe this parser can be easily extended to LR (k)
grammars and also be converted to an LALR (1) parser. We implemented BPP and SR
LR(1) parsing algorithm for C Programming Language. We evaluated performance of
both techniques by parsing 10 random files from Linux Kernel source. BPP showed
28% and 52% improvement in the case of including header files and excluding
header files respectively