Existem muitas soluções possíveis para cada questão. Eis um exemplo de solução. 1) a) [a-z]?([A-Z][a-z])*[A-Z]? b) [01][01][01][01][01][01][01][01][01][01] a{1,1024} outro jeito: [0-9][0-9][a-j]|[1-4][1-3][12] c) [0-2][0-9][0-9][0-9] outro jeito ainda melhor: [0-2]?[0-9]{1,3} d) [A-F0-9][A-F0-9] ou, ainda melhor: [a-fA-F0-9]{1,2} 2) A primeira coisa a fazer é tentar estabilizar o erro, i.e., fazer com que ele se repita sempre. Para isso, é preciso identificar qual entrada de dados ou qual situação específica está gerando o erro. A segunda coisa é localizar que parte do código está causando o erro. Esse tipo de erro pode acontecer quando se usa números aleatórios, quando se usa a hora do relógio, quando a entrada para o programa varia e só algumas entradas específicas causam o erro, ponteiros perdidos, variáveis não inicializadas, acesso a vetores fora dos limites, estouros da pilha, etc. Qualquer exemplo descrevendo um desses casos acima serviria. 3) a) imprime todos os registros (linhas) cujo comprimento é maior que 80 b) imprime todas as linhas não-vazias (i.e., que contém pelo menos um campo) ou imprime as linhas que contenham pelo menos um caractere diferente de branco c) imprime todas as linhas da entrada indicando o número da linha. Exemplo: 1: essa é a primeira linha 2: essa vem logo depois 3: essa é a última linha do meu arquivo de 3 linhas d) para as linhas contendo a palavra banana, imprime o segundo campo (palavra) da linha seguido do primeiro campo. 4) Basicamente deve-se colocar mais uma função entre termo e fator. termo: potencia | potencia [*/] termo potencia: fator | fator ^ potencia Basta então mudar a chamada a fator() por potencia() em termo, incluir o reconhecimento de '^' no analex e escrever potencia(). potencia() é algo parecido com o que segue: double potencia() { double e; e = fator(); while (ch == '^') { token = analex(); e = pow (e, potencia()); } return e; } Para a prova, basta indicar as modificações, não é preciso mostrar o código. Também não estou descontando de quem esqueceu de reconhecer o '^' como operador no analex(). 5) %{ #include %} %% [ \t]+$ [ \t]+ printf (" "); usuário printf ("%s", getlogin()); . ECHO %% /* Essa parte é opcional pois o default já inclui algo semelhante a isso */ main() { yylex(); exit (0); }