]> 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',
        'fig',
        'ftable',
        'vref',
+       'pcodehl',
        'sphinx.ext.graphviz',
        'sphinx.ext.pngmath',
 ]
        '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'.
 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 = []
 
 # 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)
 
 
    ESTADO: TERMINADO, CORREGIDO (A)
 
 
+.. highlight:: d
+
 .. _d_lang:
 
 El lenguaje de programación 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
 completamente libres::
 
    function minimize() is
-      for pool in heap
+      foreach pool in heap
          all_free = true
          all_free = true
-         for page in pool
+         foreach page in pool
             if page.block_size is not FREE
                all_free = false
                break
             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.
 
 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()``::
 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.
 .. 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:
 
 
 .. _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
    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
             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)
       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)
             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.
 
 
 hacerlo sin alejarse demasiado del objetivo principal.
 
 
+.. highlight:: d
+
 .. _sol_bench:
 
 Banco de pruebas
 .. _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[] = 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;
          }
       }
       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.
 
 
 lectura más cercana a la realidad del uso de un recolector.
 
 
+.. highlight:: pcode
+
 .. _sol_mod:
 
 Modificaciones propuestas
 .. _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
 
 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;
 
    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
             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]
 
          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_.
 
    ``$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).
 
 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
 
 
       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
 Métricas utilizadas
 ^^^^^^^^^^^^^^^^^^^
 Para analizar los resultados se utilizan varias métricas. Las más importantes