Top Qs
Timeline
Chat
Perspective
Wirth–Weber precedence relationship
From Wikipedia, the free encyclopedia
Remove ads
In computer science, a Wirth–Weber relationship between a pair of symbols is necessary to determine if a formal grammar is a simple precedence grammar. In such a case, the simple precedence parser can be used. The relationship is named after computer scientists Niklaus Wirth and Helmut Weber.
![]() | This article has multiple issues. Please help improve it or discuss these issues on the talk page. (Learn how and when to remove these messages)
|
![]() | It has been suggested that this article be merged into Simple precedence grammar. (Discuss) Proposed since May 2025. |
The goal is to identify when the viable prefixes have the pivot and must be reduced. A means that the pivot is found, a means that a potential pivot is starting, and a means that a relationship remains in the same pivot.
Remove ads
Formal definition
Remove ads
Precedence relations computing algorithm
Summarize
Perspective
We will define three sets for a symbol:
-
- Head*(X) is X if X is a terminal, and if X is a non-terminal, Head*(X) is the set with only the terminals belonging to Head+(X). This set is equivalent to First-set or Fi(X) described in LL parser.
- Head+(X) and Tail+(X) are ∅ if X is a terminal.
The pseudocode for computing relations is:
- RelationTable := ∅
- For each production
- For each two adjacent symbols X Y in α
- add(RelationTable, )
- add(RelationTable, )
- add(RelationTable, )
- For each two adjacent symbols X Y in α
- add(RelationTable, ) where S is the initial non terminal of the grammar, and $ is a limit marker
- add(RelationTable, ) where S is the initial non terminal of the grammar, and $ is a limit marker
- and are used with sets instead of elements as they were defined, in this case you must add all the cartesian product between the sets/elements.
Remove ads
Examples
Example 1
- Head+(a) = ∅
- Head+(S) = {a, c}
- Head+(b) = ∅
- Head+(c) = ∅
- Tail+(a) = ∅
- Tail+(S) = {b, c}
- Tail+(b) = ∅
- Tail+(c) = ∅
- Head*(a) = a
- Head*(S) = {a, c}
- Head*(b) = b
- Head*(c) = c
-
- a Next to S
- S Next to S
- S Next to b
- a Next to S
-
- there is only one symbol, so no relation is added.
- precedence table
Example 2
- Head+( S ) = { a, [ }
- Head+( a ) = ∅
- Head+( T ) = { b }
- Head+( [ ) = ∅
- Head+( ] ) = ∅
- Head+( b ) = ∅
- Tail+( S ) = { a, T, ], b }
- Tail+( a ) = ∅
- Tail+( T ) = { b, T }
- Tail+( [ ) = ∅
- Tail+( ] ) = ∅
- Tail+( b ) = ∅
- Head*( S ) = { a, [ }
- Head*( a ) = a
- Head*( T ) = { b }
- Head*( [ ) = [
- Head*( ] ) = ]
- Head*( b ) = b
- a Next to T
- a Next to T
- [ Next to S
- [ Next to S
- S Next to ]
- S Next to ]
- b Next to T
- b Next to T
- precedence table
Remove ads
Further reading
- Aho, Alfred V.; Ullman, Jeffrey D., The theory of parsing, translation, and compiling
Wikiwand - on
Seamless Wikipedia browsing. On steroids.
Remove ads