LR(K) grammars are useful syntactic descriptors for programming languages because they combine two important features. They are processing efficiency and wide applicability. However, the original algorithm given by Knuth for testing a grammar for the LR (K) condition and automatically constructing a parser for its sentences has serious drawbacks. Namely, for large grammars, it requires too much computation and parsimg table gets too big.
The preunion scheme described in this thesis reduces the computation required to generate an LR(K) parsing table and reduces table size that would have been produced if the Knuth algorithm were applied directly. Moreover the merits of Knuth algorithm would not be diminished by this scheme. This preunion scheme can be used in conjunction with the Korenjak's partitioning scheme when generating the individual LR(1) parser for each subgrammar of a given grammar.
This thesis also demonstrates a practical example of constructing LR(1) parsing table for Zed language given by Holt using preunion scheme jointed by partition scheme.
In this thesis a delayed union scheme is also introduced. This scheme reduces the table size that would have been produced if preunion scheme were applied. However, it has two drawbacks. One is the delayed error checking and another is a necessary to check whether the expression of p-th production exists at the top of the stack or not when the action $\underline{Reduce P}$ is called for.