hello.c#include <stdio.h>
int main() {
printf("Olá, Compiladores!\n");
return 0;
}
gcc hello.c -o hello./helloerro.c#include <stdio.h>
int main() {
int a = 10
printf("Valor: %d", a);
return 0;
}
interpretador.pyprint("Olá, mundo da interpretação!")
python interpretador.pygcctokenizador.pyimport ply.lex as lex
tokens = ('NUM', 'PLUS',)
t_PLUS = r'\+'
t_NUM = r'\d+'
t_ignore = ' \t'
def t_newline(t):
r'\n+'
t.lexer.lineno += len(t.value)
def t_error(t):
print("Caractere ilegal: ", t.value[0])
t.lexer.skip(1)
lexer = lex.lex()
lexer.input("23 + 45")
for tok in lexer:
print(tok)
import subprocess
subprocess.run(["gcc", "hello.c", "-o", "hello"])
subprocess.run(["./hello"])
gcc.; após um printf() e veja o que o compilador reporta. Qual etapa detectou?int, float, char e double.scanf com printfint x = 10 + 5;, identifique os tokens léxicos. (Feito no caderno ou verbal)."2+3") e exiba o resultado com eval().+ e -.PLY, modifique o exemplo anterior para reconhecer variáveis como x, y1..c simples e o compile com gcc.prinft ao invés de printf) e observe o erro.soma.c com int soma(int a, int b). Compile como soma.so e chame com ctypes no Python.3 + 4 * (2 - 1).gcc e clang (se disponível). Verifique diferenças no binário.timetime gcc prog.c para medir performance de códigos simples e grandes.x = y + 2 * z; Exercício: a) identificar tokens b) montar a árvore sintática c) gerar código intermediário (pseudocódigo)gcc, time, nano ou VS Codeply (pip install ply)ctypes para ligação Python/C
Compilação é o processo de tradução de um programa escrito em uma linguagem de programação (código-fonte) para uma representação equivalente em outra linguagem, geralmente de mais baixo nível.
#include
int main() {
printf("Olá, mundo!\n");
return 0;
}
$ gcc hello.c -o hello
$ ./hello
Olá, mundo!


Um interpretador é um programa que executa diretamente instruções escritas em uma linguagem de programação, sem necessidade de compilação prévia para código de máquina.
# hello.py
print("Olá, mundo!")
# Execução
$ python hello.py
Olá, mundo!
// hello.c
#include
int main() {
printf("Olá, mundo!\n");
return 0;
}
// Compilação e execução
$ gcc hello.c -o hello
$ ./hello
Olá, mundo!

if (contador > 10) {
soma = soma + valor;
}
comando → if ( expressao ) bloco
bloco → { comandos }
comandos → comando | comando comandos
comando → identificador = expressao ;
expressao → termo | termo operador termo
termo → identificador | numero


python --versionpip install plypython -c "import ply; print(ply.__version__)"

# analisador_lexico.py
import ply.lex as lex
# Lista de tokens
tokens = (
'NUMERO',
'MAIS',
'MENOS',
'VEZES',
'DIVIDE',
'LPAREN',
'RPAREN',
)
# Regras de expressão regular para tokens simples
t_MAIS = r'\+'
t_MENOS = r'-'
t_VEZES = r'\*'
t_DIVIDE = r'/'
t_LPAREN = r'\('
t_RPAREN = r'\)'
# Regra para números
def t_NUMERO(t):
r'\d+'
t.value = int(t.value)
return t
# Ignorar espaços e tabs
t_ignore = ' \t'
# Tratamento de erros
def t_error(t):
print(f"Caractere ilegal '{t.value[0]}'")
t.lexer.skip(1)
# Construir o analisador léxico
lexer = lex.lex()
# Testar com uma entrada
data = '3 + 4 * (10 - 5)'
lexer.input(data)
# Tokenizar
for tok in lexer:
print(tok)
LexToken(NUMERO,3,1,0)
LexToken(MAIS,'+',1,2)
LexToken(NUMERO,4,1,4)
LexToken(VEZES,'*',1,6)
LexToken(LPAREN,'(',1,8)
LexToken(NUMERO,10,1,9)
LexToken(MENOS,'-',1,12)
LexToken(NUMERO,5,1,14)
LexToken(RPAREN,')',1,15)