Advertisement
Guest User

Untitled

a guest
Jun 17th, 2018
174
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. reject
  2.     | newRules finish toRemove changed numOfElBefore numOfElAfter|
  3.     newRules := rules copy.
  4.     finish := Set new.
  5.     changed := true.
  6.     [changed] whileTrue: [
  7.         changed := false.
  8.         numOfElBefore := (newRules size).
  9.         newRules copy do: [:rule |
  10.             toRemove := true.
  11.             (rule value) do: [:v |
  12.                 (nonterminals includes: v)
  13.                 ifTrue: [
  14.                     (finish includes: v)
  15.                     ifFalse: [
  16.                         toRemove := false.
  17.                     ]
  18.                 ]
  19.             ].
  20.             toRemove
  21.             ifTrue: [
  22.                 (rule key) == start
  23.                 ifTrue: [
  24.                     ^false
  25.                 ].
  26.                 finish add: (rule key).
  27.                 newRules remove: rule.
  28.             ]
  29.         ].
  30.         numOfElAfter := (newRules size).
  31.         numOfElBefore == numOfElAfter
  32.         ifFalse: [changed := true]
  33.     ].
  34.     ^ true
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement