3307
Comentário:
|
← Revisão 11e 2011-07-16 14:37:48 ⇥
4845
Corrigindo a URL para o GoogleCode
|
Deleções são marcadas assim. | Adições são marcadas assim. |
Linha 6: | Linha 6: |
#!python | |
Linha 18: | Linha 17: |
Veja que `while` virou `enquanto`, `yield` virou `produzir`, `print` virou `exibir` e `range` virou `faixa`. Mas `def` é `def` mesmo. E `next` é um método, por isso mais complicado de traduzir... |
|
Linha 31: | Linha 33: |
('and', 'e'), ('as', 'como'), |
|
Linha 39: | Linha 39: |
('elif', 'senãose'), ('else', 'senão'), |
('elif', 'senaose'), ('else', 'senao'), |
Linha 44: | Linha 44: |
('for', 'para'), ('from', 'de'), |
|
Linha 47: | Linha 45: |
('if', 'se'), | |
Linha 49: | Linha 46: |
('in', 'em'), ('is', 'é'), |
|
Linha 52: | Linha 47: |
('not', 'não'), ('or', 'ou'), |
|
Linha 60: | Linha 53: |
('yield', 'produzir'), # os comandos mais curtos tem que ser processados depois dos mais longos # para evitar que 'e' seja substituido antes de 'finalmente' ('as', 'como'), ('for', 'para'), ('not', 'nao'), |
|
Linha 61: | Linha 60: |
('yield', 'produzir'), | ('or', 'ou'), ('if', 'se'), ('in', 'em'), ('is', 'eh'), ('from', 'de'), ('and', 'e'), |
Linha 67: | Linha 71: |
saida = entrada | utf_reader = codecs.getreader('utf8') saida = entrada # saida, n = utf_reader.decode(entrada, erros) |
Linha 69: | Linha 75: |
trad += ' ' if trad in saida: saida = saida.replace(trad, orig+' ') |
if trad+' ' in saida: saida = saida.replace(trad+' ', orig+' ') if trad+':' in saida: saida = saida.replace(trad+':', orig+':') |
Linha 79: | Linha 87: |
# eis como daria para traduzir as funções embutidas: |
|
Linha 95: | Linha 100: |
Experimente, funciona! == Ajude a Sucuri == Os programas desta página podem ser obtidos no Googlecode: http://code.google.com/p/propython/source/browse/mafua/sucuri Ainda não consegui fazer funcionar este exemplo: {{{ # coding: sucuri para i em faixa(20): se nao i % 2: exibir i, 'eh multiplo de 2', se nao i % 3: exibir 'e de 3' senao: exibir senaose i % 3: exibir i, 'eh multiplo de 3' senao: exibir i }}} Está dando um erro de sintaxe, e não sei como depurar um codec:: {{{ $ python -c "import sucuri_dec; import se" Traceback (most recent call last): File "<string>", line 1, in <module> File "se.py", line 8 elif: ^ SyntaxError: invalid syntax }}} Além disso, eu gostaria que Sucuri permitisse o uso de acentos, mas para isso preciso encadear dois codecs, e ainda não descobri como. Se quiser ajudar, escreva para ramalho no serviço de e-mail do Google! |
|
Linha 97: | Linha 145: |
Este experimento foi inspirado pelo blog do Benji York da Zope Corp: | Este experimento é basicamente inútil. Foi inspirado pelo blog do Benji York da Zope Corp: |
Linha 103: | Linha 151: |
Não sei se isso tem algum valor pedagógico, até porque não sou um defensor do Portugol e abordagens semelhantes, porque não acho que decorar algumas palavras em inglês seja o maior obstáculo para brasileiros aprendendo a programar. | Se Sucuri tem algum valor, talvez seja pedagógico. Mas tenho sérias dúvidas... |
Linha 105: | Linha 153: |
O pulo do gato é aprender a pensar como programador, e isso não é uma questão de memorização, mas sim de prática em resolução de problemas. Uma linguagem ágil e versátil como Python é muito mais motivante, porque permite apresentar uma gama muito maior de problemas interessantes para serem resolvidos, que se seriam demasiadamente complicados ou demais em um dialeto de Pascal ou C. | Não sou um defensor de Portugol e linguagens semelhantes, porque não acho que decorar algumas palavras em inglês seja o maior obstáculo para brasileiros aprendendo a programar. O pulo do gato é aprender a pensar como programador, e isso não é uma questão de memorização, mas sim de prática em resolução de problemas. |
Linha 107: | Linha 155: |
Mas talvez entre Python e Portugol, a melhor opção para primeira linguagem seja mesmo Sucuri... | Uma linguagem ágil e versátil como Python é muito mais motivante, porque permite apresentar uma gama maior de problemas interessantes para serem resolvidos, que se seriam demasiadamente complicados ou trabalhosos em um dialeto de Pascal ou C. Mas talvez entre Python e Portugol, a melhor opção para primeira linguagem seja mesmo Sucuri. Será? |
A sucuri é uma cobra constritora comum no Brasil. É também o nome desta brincadeira: traduzir a linguagem Python para o português.
Exemplo: fibonacci.py
# coding: sucuri def fibonacci(a=1, b=1): enquanto 1: produzir a a, b = b, a+b t = fibonacci() para i em faixa(100): exibir t.next()
Veja que while virou enquanto, yield virou produzir, print virou exibir e range virou faixa. Mas def é def mesmo. E next é um método, por isso mais complicado de traduzir...
O comentário especial coding: sucuri faz com que o interpretador Python invoque o nosso codec para pré-processar o programa-fonte.
O codec: sucuri_dec.py
1 # coding: utf-8
2
3 import codecs
4
5 RESERVADAS = (
6 ('assert', 'assegurar'),
7 ('break', 'interromper'),
8 ('class', 'classe'),
9 ('continue', 'continuar'),
10 ('def', 'def'),
11 ('del', 'apagar'),
12 ('elif', 'senaose'),
13 ('else', 'senao'),
14 ('except', 'exceto'),
15 ('exec', 'exec'),
16 ('finally', 'finalmente'),
17 ('global', 'global'),
18 ('import', 'importar'),
19 ('lambda', 'lambda'),
20 ('pass', 'passar'),
21 ('print', 'exibir'),
22 ('raise', 'levantar'),
23 ('return', 'devolver'),
24 ('try', 'tentar'),
25 ('while', 'enquanto'),
26 ('yield', 'produzir'),
27 # os comandos mais curtos tem que ser processados depois dos mais longos
28 # para evitar que 'e' seja substituido antes de 'finalmente'
29 ('as', 'como'),
30 ('for', 'para'),
31 ('not', 'nao'),
32 ('with', 'com'),
33 ('or', 'ou'),
34 ('if', 'se'),
35 ('in', 'em'),
36 ('is', 'eh'),
37 ('from', 'de'),
38 ('and', 'e'),
39 )
40
41
42 class StreamReader(codecs.StreamReader):
43 def decode(self, entrada, erros='strict'):
44 utf_reader = codecs.getreader('utf8')
45 saida = entrada
46 # saida, n = utf_reader.decode(entrada, erros)
47 for orig, trad in RESERVADAS:
48 if trad+' ' in saida:
49 saida = saida.replace(trad+' ', orig+' ')
50
51 if trad+':' in saida:
52 saida = saida.replace(trad+':', orig+':')
53 return unicode(saida), len(entrada)
54
55 def get_my_codec(name):
56 if name == 'sucuri':
57 return (codecs.utf_8_encode, None, StreamReader, None)
58
59 codecs.register(get_my_codec)
60 __builtins__['tam'] = len
61 __builtins__['faixa'] = range
Exemplo de uso
Para usar o codec, é preciso invocar o script a partir da linha de comando, desta maneira:
$ python -c "import sucuri_dec; import fibonacci"
Experimente, funciona!
Ajude a Sucuri
Os programas desta página podem ser obtidos no Googlecode:
http://code.google.com/p/propython/source/browse/mafua/sucuri
Ainda não consegui fazer funcionar este exemplo:
# coding: sucuri para i em faixa(20): se nao i % 2: exibir i, 'eh multiplo de 2', se nao i % 3: exibir 'e de 3' senao: exibir senaose i % 3: exibir i, 'eh multiplo de 3' senao: exibir i
Está dando um erro de sintaxe, e não sei como depurar um codec::
$ python -c "import sucuri_dec; import se" Traceback (most recent call last): File "<string>", line 1, in <module> File "se.py", line 8 elif: ^ SyntaxError: invalid syntax
Além disso, eu gostaria que Sucuri permitisse o uso de acentos, mas para isso preciso encadear dois codecs, e ainda não descobri como.
Se quiser ajudar, escreva para ramalho no serviço de e-mail do Google!
Motivação e utilidade
Este experimento é basicamente inútil. Foi inspirado pelo blog do Benji York da Zope Corp:
http://benjiyork.com/blog/2008/02/programmable-python-syntax-via-source.html
É um uso criativo da infra-estrutura de codecs criada para pré-processar arquivos-fonte em Python, de acordo com o PEP-0263 (http://www.python.org/dev/peps/pep-0263/).
Se Sucuri tem algum valor, talvez seja pedagógico. Mas tenho sérias dúvidas...
Não sou um defensor de Portugol e linguagens semelhantes, porque não acho que decorar algumas palavras em inglês seja o maior obstáculo para brasileiros aprendendo a programar. O pulo do gato é aprender a pensar como programador, e isso não é uma questão de memorização, mas sim de prática em resolução de problemas.
Uma linguagem ágil e versátil como Python é muito mais motivante, porque permite apresentar uma gama maior de problemas interessantes para serem resolvidos, que se seriam demasiadamente complicados ou trabalhosos em um dialeto de Pascal ou C.
Mas talvez entre Python e Portugol, a melhor opção para primeira linguagem seja mesmo Sucuri. Será?
LucianoRamalho, inspirado por Benji York