Exercício 1: Objetivo: Desenvolver uma gramática para uma linguagem simples do tipo SQL Consulta: "SELECT" campos=Campos "FROM" tabelas=Tabelas "WHERE" condicoes=Condicoes; Campos: colecao+=Campo ("," colecao+=Campo)*; Campo: tabela=STRING "." coluna=STRING; Tabelas: colecao+=Tabela ("," colecao+=Tabela)*; Tabela: nome=STRING; Condicoes: colecao+=Condicao ("AND" colecao+=Condicao)*; Condicao: esquerda=Campo "=" direita=Campo; Exercício 2: Objetivo: Desenvolver uma gramática para duas linguagens – uma para definição de tipos de dados e outra para definição de formatos tipo Pessoa { nome : String endereco : Endereco telefone : String } tipo Endereco { rua : String numero : int bairro : String cidade : String estado : String } tipo Dependente { nome : String idade : int titular : Pessoa } registro Pessoa (“PES”) { nome:endereco:telefone } registro Endereco (“END”) { rua:numero:bairro:cidade:estado } registro Dependente (“DEP”) { nome:idade:titular } Importa : "Tipos" "{" (tipos+=Tipo)* "}" "Registros" "{" (registros+=Registro)* "}" ; Tipo : "tipo" name=ID "{" (atributos+=Atributo)+ "}" ; Atributo : name=ID ":" (tipo=Primitivo | ref=[Tipo]) ; Primitivo: "String" | "int" | "double" | "float" ; Registro: "registro" tipo=[Tipo] "(" (identificador=STRING) ")" "{" campos+=[Atributo] (":" campos+=[Atributo])* "}" ; Exercício 3 Objetivo: Desenvolver um metamodelo para uma linguagem para questionários Exercício 4 Objetivo: Desenvolver um metamodelo para uma linguagem que descreve topologias de redes