]> git.llucax.com Git - z.facultad/75.00/informe.git/commitdiff
Agregar resaltado de sintaxis a seudo-código
authorLeandro Lucarella <llucax@gmail.com>
Mon, 11 Oct 2010 04:29:13 +0000 (01:29 -0300)
committerLeandro Lucarella <llucax@gmail.com>
Mon, 11 Oct 2010 04:29:13 +0000 (01:29 -0300)
También corrige algunas inconsistencias entre uso de for/foreach y otros
detalles.

ext/pcodehl.py [new file with mode: 0644]
source/conf.py
source/d.rst
source/dgc.rst
source/gc.rst
source/solucion.rst

diff --git a/ext/pcodehl.py b/ext/pcodehl.py
new file mode 100644 (file)
index 0000000..d378df4
--- /dev/null
@@ -0,0 +1,61 @@
+
+from pygments.lexer import RegexLexer, include, bygroups, using, this
+from pygments.token import *
+
+class PseudoCodeLexer(RegexLexer):
+    name = 'PseudoCode'
+    aliases = ['pcode']
+    filenames = ['*.pcode']
+
+    #: optional Comment or Whitespace
+    _ws = r'(?:\s|//.*?\n|/[*].*?[*]/)+'
+
+    tokens = {
+        'whitespace': [
+            (r'\n', Text),
+            (r'\s+', Text),
+            (r'\\\n', Text), # line continuation
+            (r'//(\n|(.|\n)*?[^\\]\n)', Comment.Single),
+            (r'/(\\\n)?[*](.|\n)*?[*](\\\n)?/', Comment.Multiline),
+        ],
+        'statements': [
+            (r'L?"', String, 'string'),
+            (r"L?'(\\.|\\[0-7]{1,3}|\\x[a-fA-F0-9]{1,2}|[^\\\'\n])'", String.Char),
+            (r'(\d+\.\d*|\.\d+|\d+)[eE][+-]?\d+[lL]?', Number.Float),
+            (r'(\d+\.\d*|\.\d+|\d+[fF])[fF]?', Number.Float),
+            (r'0x[0-9a-fA-F]+[Ll]?', Number.Hex),
+            (r'0[0-7]+[Ll]?', Number.Oct),
+            (r'\d+[Ll]?', Number.Integer),
+            (r'\*/', Error),
+            (r'[~!%^&*+=|?:<>/-]', Operator),
+            (r'[()\[\],.]', Punctuation),
+            (r'(auto|break|continue|else|function|is|in|not|and|or|while|'
+             r'foreach|if|return|throw|do|cast)\b', Keyword),
+            (r'(true|false|null|global|exit|fflush|fork|wait|try_wait)\b',
+                Name.Builtin),
+            ('[a-zA-Z_][a-zA-Z0-9_]*', Name),
+        ],
+        'root': [
+            include('whitespace'),
+            ('', Text, 'statement'),
+        ],
+        'statement' : [
+            include('whitespace'),
+            include('statements'),
+            ('[{}]', Punctuation),
+            (';', Punctuation, '#pop'),
+        ],
+        'string': [
+            (r'"', String, '#pop'),
+            (r'\\([\\abfnrtv"\']|x[a-fA-F0-9]{2,4}|[0-7]{1,3})', String.Escape),
+            (r'[^\\"\n]+', String), # all other characters
+            (r'\\\n', String), # line continuation
+            (r'\\', String), # stray backslash
+        ],
+    }
+
+def setup(app):
+    from sphinx.highlighting import lexers
+    lexers['pcode'] = PseudoCodeLexer()
+
+# vim: set et sw=4 sts=4 :
index 93750ff9c38f8a256ed5785e1f81a820fa8875c4..23ed3a055a70c6a1fbf4f3493525740cf0fbff2e 100644 (file)
@@ -27,6 +27,7 @@ extensions = [
        'fig',
        'ftable',
        'vref',
+       'pcodehl',
        'sphinx.ext.graphviz',
        'sphinx.ext.pngmath',
 ]
@@ -91,7 +92,7 @@ exclude_trees = []
 pygments_style = 'sphinx'
 
 # The default language to highlight source code in. The default is 'python'.
-highlight_language = 'd'
+highlight_language = 'pcode'
 
 # A list of ignored prefixes for module index sorting.
 #modindex_common_prefix = []
index 4b411d8e3b0c4768832da2d6d73b54a94b72c698..449109b71cb167fa57bbf83a390b5208bc8c0bc0 100644 (file)
@@ -5,6 +5,8 @@
    ESTADO: TERMINADO, CORREGIDO (A)
 
 
+.. highlight:: d
+
 .. _d_lang:
 
 El lenguaje de programación D
index 09c0c21a3300467753bf3bbb3e6b66e17676efc6..7443d90c91f45a8dfa7275b8daba086ed8b631a5 100644 (file)
@@ -854,9 +854,9 @@ siguiente función, que devuelve al *low level allocator* los *pools*
 completamente libres::
 
    function minimize() is
-      for pool in heap
+      foreach pool in heap
          all_free = true
-         for page in pool
+         foreach page in pool
             if page.block_size is not FREE
                all_free = false
                break
@@ -1533,6 +1533,8 @@ recolector actual y en consecuencia sea muy complicado escribir documentación
 o mejorarlo. Esto a su vez provoca que, al no disponer de una implementación
 de referencia sencilla, sea muy difícil implementar un recolector nuevo.
 
+.. highlight:: d
+
 Este es, probablemente, la raíz de todos los demás problemas del recolector
 actual. Para ilustrar la dimensión del problema se presenta la implementación
 real de la función ``bigAlloc()``::
index 1998a31d558cd172bc8735f2a2d9c404867269ef..de03886479f81d4ecbe9c9c1eb69941df05f3f9e 100644 (file)
@@ -2,7 +2,7 @@
 .. Introducción a la importancia de la recolección de basura y sus
    principales técnicas, con sus ventajas y desventajas. También se da
    un breve recorrido sobre el estado del arte.
-   ESTADO: TERMINADO, CORREGIDO
+   ESTADO: TERMINADO
 
 
 .. _gc:
@@ -321,7 +321,7 @@ siguiente (asumiendo que partimos con todos los vértices sin marcar)
    function mark(v) is
       if not v.marked
          v.marked = true
-         for (src, dst) in v.edges
+         foreach (src, dst) in v.edges
             mark(dst)
 
    function mark_phase() is
@@ -608,7 +608,7 @@ vacíos)::
       while not gray_set.empty()
          v = gray_set.pop()
          black_set.add(v)
-         for (src, dst) in v.edges
+         foreach (src, dst) in v.edges
             if dst in white_set
                white_set.remove(dst)
                gray_set.add(dst)
index fe9086b0f4adb51eaf69096cc63fcd90d955529f..2907da2825ec537bd82a538074970cc579bbc5a5 100644 (file)
@@ -38,6 +38,8 @@ se intenta abordar los demás problemas planteados siempre que sea posible
 hacerlo sin alejarse demasiado del objetivo principal.
 
 
+.. highlight:: d
+
 .. _sol_bench:
 
 Banco de pruebas
@@ -141,8 +143,8 @@ El código fuente del programa es el siguiente::
             indi[] = testPop1.individuals ~ testPop2.individuals;
          }
          version (everythingOk) {
-            indi[0..N1] = testPop1.individuals;
-            indi[N1..N2] = testPop2.individuals;
+            indi[0 .. N1] = testPop1.individuals;
+            indi[N1 .. N2] = testPop2.individuals;
          }
       }
       return 0;
@@ -562,6 +564,8 @@ ser útiles para encontrar problemas muy particulares, está es la que da una
 lectura más cercana a la realidad del uso de un recolector.
 
 
+.. highlight:: pcode
+
 .. _sol_mod:
 
 Modificaciones propuestas
@@ -1133,7 +1137,9 @@ a continuación.
 
 Los conjuntos de bits guardan la información sobre la primera palabra en el
 bit menos significativo. Dada la complejidad de la representación, se ilustra
-con un ejemplo. Dada la estructura::
+con un ejemplo. Dada la estructura:
+
+.. code-block:: d
 
    union U {
       ubyte ub;
@@ -1581,7 +1587,7 @@ empezar la fase de marcado no sean barridas por tener ese bit activo::
             pages = assign_pages(pool, number_of_pages)
       pages[0].block.free = true                         // Agregado
       pages[0].block_size = PAGE
-      foreach page in pages[1..end]
+      foreach page in pages[1 .. end]
          page.block_size = CONTINUATION
       return pages[0]
 
@@ -1906,8 +1912,6 @@ que se especifique lo contrario), que se detallan a continuación.
    ``$dst_dir`` es el directorio donde almacenar los archivos generados
    y ``$tango_files`` es la lista de archivos fuente de Tango_.
 
-.. highlight:: d
-
 El resto de los programas se ejecutan sin parámetros (ver :ref:`sol_bench`
 para una descripción detallada sobre cada uno).
 
@@ -1963,8 +1967,6 @@ todo
 
       conservative=0:fork=1:early_collect=1:eager_alloc=1
 
-.. highlight:: d
-
 Métricas utilizadas
 ^^^^^^^^^^^^^^^^^^^
 Para analizar los resultados se utilizan varias métricas. Las más importantes