Exercício 07.116

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 na linguagem de programação LISP:

(defun multiply (number)
  (* 7 number)
)

(defun averagenum (n1 n2 n3 n4)
  (/ ( + n1 n2 n3 n4) 4)
)

(defun discriminant (a b c)
  (- (* b b) (* 4 a c))
)

(defun factorial (number)
  (if (= number 1)
    1
    (* number (factorial (- number 1)))
  )
)

Resposta com recursividade à esquerda

G = ({programa, função, parâmetro, operação, se, expressão, condição, fator, termo, operando, logico,
      aritmético, nome, real, inteiro, sinal, numero, letra, digito}, {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, programa)
P = {< programa >   ::=  ( defun < função > < operação > )
     < função >     ::=  < nome > ( < parâmetro > )
     < parâmetro >  ::=  < parâmetro > < nome > | ε
     < operação >   ::=  < se > | < termo >
     < se >         ::=  ( se < condição > < operação > < operação > )
     < condição >   ::=  ( < logico > < termo > < fator > )
     < termo >      ::=  < operando > | < expressão > | < função >
     < expressão >  ::=  ( < aritmético > < termo > < fator > )
     < fator >      ::=  < fator > < termo > | < termo >
     < operando >   ::=  < nome > | < real >
     < logico >     ::=  = | != | > | >= | < | <=
     < aritmético > ::=  + | - | * | /
     < nome >       ::=  < nome > < digito > | < nome > < letra > | < letra >
     < real >       ::=  < inteiro > . < numero > | < inteiro >
     < inteiro >    ::=  < sinal > < numero >
     < sinal >      ::=  ε | + | -
     < numero >     ::=  < numero > < digito > | < digito >
     < letra >      ::=  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
     < digito >     ::=  0  |  1  |  2  |  3  |  4  |  5  |  6  |  7  |  8  |  9 }

Recomendamos

Agenda TI Revista Segurança Digital Vida de Suporte