From 6eefbae7d9d9a1e30f7637ecc41f56a21dc93567 Mon Sep 17 00:00:00 2001 From: Leandro Lucarella Date: Mon, 11 Oct 2010 01:29:13 -0300 Subject: [PATCH] =?utf8?q?Agregar=20resaltado=20de=20sintaxis=20a=20seudo-?= =?utf8?q?c=C3=B3digo?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit También corrige algunas inconsistencias entre uso de for/foreach y otros detalles. --- ext/pcodehl.py | 61 +++++++++++++++++++++++++++++++++++++++++++++ source/conf.py | 3 ++- source/d.rst | 2 ++ source/dgc.rst | 6 +++-- source/gc.rst | 6 ++--- source/solucion.rst | 18 +++++++------ 6 files changed, 82 insertions(+), 14 deletions(-) create mode 100644 ext/pcodehl.py diff --git a/ext/pcodehl.py b/ext/pcodehl.py new file mode 100644 index 0000000..d378df4 --- /dev/null +++ b/ext/pcodehl.py @@ -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 : diff --git a/source/conf.py b/source/conf.py index 93750ff..23ed3a0 100644 --- a/source/conf.py +++ b/source/conf.py @@ -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 = [] diff --git a/source/d.rst b/source/d.rst index 4b411d8..449109b 100644 --- a/source/d.rst +++ b/source/d.rst @@ -5,6 +5,8 @@ ESTADO: TERMINADO, CORREGIDO (A) +.. highlight:: d + .. _d_lang: El lenguaje de programación D diff --git a/source/dgc.rst b/source/dgc.rst index 09c0c21..7443d90 100644 --- a/source/dgc.rst +++ b/source/dgc.rst @@ -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()``:: diff --git a/source/gc.rst b/source/gc.rst index 1998a31..de03886 100644 --- a/source/gc.rst +++ b/source/gc.rst @@ -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) diff --git a/source/solucion.rst b/source/solucion.rst index fe9086b..2907da2 100644 --- a/source/solucion.rst +++ b/source/solucion.rst @@ -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 -- 2.43.0