Грамматика называется приведенной, если она не содержит приведенных символов. 
Символ называется  бесполезным, если: 
  - Из него не может быть получена конечная цепочка.
 
  - Символ не может быть получен при выводе.
 
 
Если из символа не может быть выведена конечная цепочка, то  он называется непроизводящим. 
  Алгоритм определение непроизводящих символов: 
  - Составить множество нетерминальных символов, для  которых правая часть правил содержит только терминалы или пусто.
 
  - Если существует правило, для которого правая  часть содержит терминальные символы нетерминальные символы включенные множества  на предыдущем шаге, то дополнить множество левым нетерминалом. 
 
  - Пункт 2 выполнять до тех пор, пока множество не  перестанет пополняться.
 
 
Символы не вошедшие в множество называются непроизводящими.  Правило их содержащие должны быть исключены. 
Пример 1: 
  I -> ABC 
  A -> int  | char 
  B -> iR 
  R -> ,iR  | i 
  C -> ; 
  Решение: 
  - A,C,R
 
  - A,C,R,B
 
  - A,C,R,B,I
 
 
Так как все нетерминальные символы входят в множество допустимых  нетерминалов, то грамматика не содержит непроизводящих символов. 
Пример 2: 
  I -> aIa 
  I -> bAd 
  I -> c 
  A -> aBd 
  B -> dA 
  Решение: 
  - I
 
  - I+I = I
 
  - Множество не пополняется, следовательно, все  остальные (A,B) является непроизводящие,  следовательно, их нужно исключить.
 
 
Итак, 
  I -> aIa 
  I -> c 
Пример 3: 
  I ->  i=AB 
  A ->iR 
  A ->(A)R 
  R ->+A 
  R ->$ 
  Решение: 
  - R
 
  - R,  A
 
  - R,  A
 
 
Правило 1 (I  -> i=AB) нужно исключить. 
Недостижимые символы – это символы, которые не участвуют в выводе. Правило, содержащее недостижимые  символы, должны быть исключены из грамматики. Алгоритм определение недостижимых  символов. 
  - Включить множество начальных символов грамматики  I.
 
  - Если в правой части грамматики содержатся  терминальные символы и нетерминальные символы уже вошедшие в список, то  дополнить множество левым нетерминалом данного правила.
 
  - Шаг 2 повторять до тех пор, пока множество не  перестанет пополняться.
 
 
Пример 1: 
  I -> ABC 
  A -> int  | char 
  B -> iR 
  R  -> ,iR | i 
  C  -> ; 
  Решение: 
  - I
 
  - I,  A, B, C
 
  - I,  A, B, C, R. То  есть все символы являются производящими.
 
 
   
				
			  
				Дата добавления:   | 
				Просмотров: 7477  | 
			   
         	 
 |