Exercício 07.94
Projetar um compilador para uma determinada linguagem envolve, entre outras coisas, especificar quais são os símbolos válidos nesta linguagem, bem como quais são as regras sintáticas que a definem. A linguagem de programação Java é uma linguagem com suporte à orientação a objetos que não permite herança múltipla e que permite que uma classe implemente múltiplas interfaces. A seguir, exibem-se trechos de código sintaticamente válidos na linguagem Java.
Trecho 1:
class A extends B { }
Trecho 2:
class F implements C { }
Trecho 3:
class J extends A implements C, D { }
No trecho 1, cria-se uma classe chamada A que herda de uma classe chamada B. No trecho 2, cria-se uma classe chamada F que implementa uma interface chamada C. No trecho 3, cria-se uma classe chamada J que herda de uma classe chamada A e implementa duas interfaces, chamadas C e D.
Desenvolva uma Gramática Livre do Contexto (GLC) que especifica uma linguagem que não permita herança múltipla e que implemente zero ou mais interfaces, como definido na linguagem de programação Java.