Escolar Documentos
Profissional Documentos
Cultura Documentos
1)
estado := 0
while(1){
c := cadeia.proximo_caractere()
switch(estado){
case(0):
se(c=’0’):
cont:=0
c := cadeia.proximo_caractere()
se c = 1 ou c = 0 faça
cont++
senao se c==’$’ faça
estado = 1
break
senao
retorna “falhou”
se(c=’1’):
cont:=0
c := cadeia.proximo_caractere()
se c = 1 ou c = 0 faça
cont++
senao se c==’$’ faça
estado = 2
break
senao
retorna “falhou”
case(1):
case(2):
senao:
retornar “falhou”
2)
%{
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int total_palavras = 0;
int palavra_vogalvogal = 0;
int palavra_vogalcons = 0;
int palavra_consvogal = 0;
int palavra_conscons = 0;
%}
ALFABETO [a-zA-Z]
CONSOANTES [bBcCdDfFgGhHjJkKlLmMnNpPqQrRsStTvVwWxXyYzZ]
VOGAIS [aAeEiIoOuU]
VOGALVOGAL {VOGAIS}({ALFABETO})*{VOGAIS}
VOGALCONS {VOGAIS}({ALFABETO})*{CONSOANTES}
CONSVOGAL {CONSOANTES}({ALFABETO})*{VOGAIS}
CONSCONS {CONSOANTES}({ALFABETO})*{CONSOANTES}
%%
%%
int yywrap();
int main(){
yylex();
printf("Quantidade total de palavras: %d\n", total_palavras);
printf("Quantidade total de palavras que começam e terminam com vogal: %d\n",
palavra_vogalvogal);
printf("Quantidade total de palavras que começam e terminam com consoante: %d\n",
palavra_conscons);
printf("Quantidade total de palavras que começam com vogal e terminam com consoante: %d\n",
palavra_vogalcons);
printf("Quantidade total de palavras que começam com consoante e terminam com vogal: %d\n",
palavra_consvogal);
}
int yywrap(){
return 1;
}
3)
a)
Gramática G3:
b)
int Lexpseq();
void LexpseqLinha();
int Lexp();
int num();
void numLinha();
void LexpseqLinha(){
Lexpseq();
}
void numLinha(){
num();
}
int num(){
if(cadeia for um numero){
numLinha();
return 1;
}
return 0;
}
int Lexp(){
Lexpseq();
}
return 1;
}
return 0;
}
Lexp();
4)
Tratando a recursividade em S:
S →abAS’ | baCS’
S’ → ABS’ | ε
S →abAS’ | baCS’
S’ → ABS’ | ε
A → aSb | d
B → bScC | c
C →cCa | b
b)
FIRST(S) = {a, b}
FIRST(S’) = {ε, a, d}
FIRST(A) = {a, d}
FIRST(B) = {b, c}
FIRST(C) = {c, b}
FOLLOW(S) = {$, b, c}
FOLLOW(S’) = {$, b, c}
FOLLOW(A) = {$, a, b, c, d}
FOLLOW(B) = {$, a, b, c, d}
FOLLOW(C) = {$, a, b, c, d}
c)
a b c d $
S S→ abAS’ S → baCS’ VARRE VARRE SAI
S’ S’ → ABS’ S’ → ε S’ → ε S’ → ABS’ S’ → ε
A A →aSb SAI SAI A→d SAI
B SAI B → bScC B→c SAI SAI
C SAI C→b C → cCa SAI SAI
d)