Exercício 07.106

Desenvolva uma Gramática Livre do Contexto (GLC) sobre o alfabeto Σ = {a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, +, -, *, /, (, ), >, <, =, !, :, ;}, que reconheça as seguintes instruções de programação:

< label > : do < expr > goto < label > ;
< label > : if < cond > then goto < label > else goto < label > ;

Sendo as variáveis label, expr e cond informalmente definidas como:

< label > ::= r seguido por um número;
< expr >  ::= uma expressão aritmética, com os operadores +, -, * e /, os delimitadores ( e ) e os
              operandos int e var, que representam um número inteiro e o nome de uma variável,
              respectivamente;
< cond >  ::= uma expressão lógica, com os operadores >, >=, <, <=, ==, != e os operandos int e var,
              que representam um número inteiro e o nome de uma variável, respectivamente.

Resposta com recursividade à esquerda

G = ({program, instr, oper, test, label, expr, add, mul, factor, cond, term, int, var, number, relat,
      letter, digit}, {a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z,
      0, 1, 2, 3, 4, 5, 6, 7, 8, 9, +, -, *, /, (, ), >, <, =, !, :, ;}, P, program)
P = {< program >  ::= < program > < instr > | < instr >
     < instr >    ::= < oper > | < test >
     < oper >     ::= < label > : do < expr > goto < label > ;
     < test >     ::= < label > : if < cond > then goto < label > else goto < label > ;
     < label >    ::= r < number >
     < expr >     ::= < var > = < add >
     < add >      ::= < add > + < mul > | < add > - < mul > | < mul >
     < mul >      ::= < mul > * < factor > | < mul > / < factor > | < factor >
     < factor >   ::= ( < add > ) | < term >
     < cond >     ::= < term > < relat > < term >
     < term >     ::= < var > | < int >
     < int >      ::= < number > | - < number >
     < var >      ::= < var > < letter > | < var > < number > | < letter >
     < number >   ::= < number > < digit > | < digit >
     < relat >    ::= > | >= | < | <= | == | !=
     < letter >   ::= a  |  b  |  c  |  d  |  e  |  f  |  g  |  h  |  i  |  j  |  k  |  l  |  m
                   |  n  |  o  |  p  |  q  |  r  |  s  |  t  |  u  |  v  |  w  |  x  |  y  |  z
     < digit >    ::= 0  |  1  |  2  |  3  |  4  |  5  |  6  |  7  |  8  |  9 }

Recomendamos

Vida de Programador Vida de Suporte Revista Tema