Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- calculateFirstRightSide: rightSide
- | break firstSet firstSetB set rightSideRule epsilon|
- rightSideRule := RightSideRule withAll: rightSide.
- firstSet := Set new.
- break := false.
- epsilon := true.
- rightSideRule do: [ :sym |
- (break)
- ifFalse: [
- (terminalsSet includes: sym)
- "terminal"
- ifTrue: [
- firstSet add: sym.
- epsilon := false.
- break := true.
- ]
- "nieterminal"
- ifFalse: [
- firstSetB := firstDict at: sym.
- set := firstSetB copy.
- (set includes: Eps)
- ifTrue: [ set remove: Eps ]
- ifFalse: [
- break := true.
- epsilon := false.
- ].
- firstSet addAll: set.
- ].
- ].
- ].
- (epsilon)
- ifTrue: [
- firstSet add: Eps.
- ].
- ^firstSet.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement