CONFLICTS IN PARSING In the process of Parsing

  • Slides: 10
Download presentation
CONFLICTS IN PARSING In the process of Parsing, a stage where there is a

CONFLICTS IN PARSING In the process of Parsing, a stage where there is a problem in deciding the production to be used is referred to as CONFLICT. There are two kinds of conflicts possible a) Shift-Reduce Conflict. b) Reduce-Reduce Conflict.

SHIFT REDUCE CONFLICT Consider the symbol-stack in process of parsing as X = $F

SHIFT REDUCE CONFLICT Consider the symbol-stack in process of parsing as X = $F Now, there input string, w points to * There also exists a production T->F. We can either SHIFT, thereby X = $F* We can REDUCE, thereby X = $T. This condition is referred to as shift reduce conflict.

REDUCE CONFLICT Consider the symbol-stack in process of parsing as X = $Ma. AB

REDUCE CONFLICT Consider the symbol-stack in process of parsing as X = $Ma. AB Let's say there exists two productions which give rise to Aab. Y->Aab and X->Aab. Now, which production to be chosen for reduction is again a question. This is called Reduce Conflict.

RESOLUTION OF CONFLICTS These conflicts depend on the implementation and can be removed by

RESOLUTION OF CONFLICTS These conflicts depend on the implementation and can be removed by using the following parsers. a)Operator Precedence Parser b)LR Parser : i)SLR Parser ii)CLR Parser iii)LALR Parser

OPERATOR PRECEDENCE PARSER This is a very primitive parser This works only for Mathematical/Arithmetic

OPERATOR PRECEDENCE PARSER This is a very primitive parser This works only for Mathematical/Arithmetic expressions. It consists of a Precedence Table, which serves as information when the stack top and the current input symbol is known and we want to shift or reduce. This is valid for a specific set of grammar.

OPERATOR GRAMMAR The operator grammar produces all the strings that can be parsed using

OPERATOR GRAMMAR The operator grammar produces all the strings that can be parsed using an operator precedence parser. No other strings will be parsed. Hence, the language follows certain restrictions. No ϵ-Transitions are allowed. No 2 or more consecutive Non terminal symbols allowed in the body of any production.

PRECEDENCE INFORMATION To design a Precedence Table, we need to store the precedence information.

PRECEDENCE INFORMATION To design a Precedence Table, we need to store the precedence information. So, whenever two terminals A, B occur, we can define few precedence operators . > . = <.

DEFINITION OF OPERATORS A. > B implies that A has higher precedence than B.

DEFINITION OF OPERATORS A. > B implies that A has higher precedence than B. A <. B implies that A has lesser precedence than B. A. = B implies that A has equal precedence as B.

PRECEDNCE TABLE Consider 3 sample terminals id, +, *, $ The precedence order is

PRECEDNCE TABLE Consider 3 sample terminals id, +, *, $ The precedence order is id > * >+ >$ Wherever 2 operators have same precedence, like a = '+' and b = '+'. where a occurs before b in an expression. Now, we check for associativity of the operator. As '+' is left associative, a. > b will be assigned in the table.

PRECEDENCE TABLE The terminal a is on the Row and the terminal b is

PRECEDENCE TABLE The terminal a is on the Row and the terminal b is on the column and here is the final precedence table In this way, Precedence table can be made for any grammar which will be used in Parsing. id + * $ id X . > . > + <. . > * <. . > . > $ <. <. X