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 }