Skip to content

Commit

Permalink
#86 - add numeric tower section, allow precedence table to split
Browse files Browse the repository at this point in the history
  • Loading branch information
danilopedraza committed Feb 11, 2025
1 parent 1676218 commit 5b64f02
Show file tree
Hide file tree
Showing 2 changed files with 101 additions and 29 deletions.
28 changes: 27 additions & 1 deletion report/ref.bib
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,7 @@ @online{perlregex
urldate = {01-08-2025}
}

@ARTICLE{softwarevocab2010,
@article{softwarevocab2010,
author={},
journal={ISO/IEC/IEEE 24765:2010(E)},
title={ISO/IEC/IEEE International Standard - Systems and software engineering -- Vocabulary},
Expand Down Expand Up @@ -109,3 +109,29 @@ @online{mpfr
url = {https://www.mpfr.org/},
urldate = {01-31-2025}
}

@article{schemereport,
author = {Adams, N. I. and Bartley, D. H. and Brooks, G. and Dybvig, R. K. and Friedman, D. P. and Halstead, R. and Hanson, C. and Haynes, C. T. and Kohlbecker, E. and Oxley, D. and Pitman, K. M. and Rozas, G. J. and Steele, G. L. and Sussman, G. J. and Wand, M. and Abelson, H.},
title = {Revised5 report on the algorithmic language scheme},
year = {1998},
issue_date = {Sept. 1, 1998},
publisher = {Association for Computing Machinery},
address = {New York, NY, USA},
volume = {33},
number = {9},
issn = {0362-1340},
url = {https://doi.org/10.1145/290229.290234},
doi = {10.1145/290229.290234},
journal = {SIGPLAN Not.},
month = sep,
pages = {26-76},
numpages = {51}
}

@online{pep3141,
title = {PEP 3141 - A Type Hierarchy for Numbers},
editor = {Jeffrey Yasskin},
year = 2007,
url = {https://peps.python.org/pep-3141/},
urldate = {02-11-2025}
}
102 changes: 74 additions & 28 deletions report/report.typ
Original file line number Diff line number Diff line change
Expand Up @@ -1394,6 +1394,49 @@ Se planea implementar una estrategia de _mark-and-sweep_, donde de manera perió

== Conversiones implícitas de valores

Komodo realiza conversiones de valores sin intervención del usuario, pero con reglas simples. Estas conversiones en dos grupos de tipos.

=== Números

Cuando dos números de diferente tipo son las entradas de una operación aritmética, una de las entradas es convertida al tipo de la otra.

Los tipos numéricos son `Integer`, `Fraction` y `Float`. Cuando se realiza una operación permitida entre cualesquiera dos valores con estos tipos, y los tipos son diferentes, se realiza una conversión de acuerdo a las siguientes reglas, verificadas en orden:

- Si uno de los valores es de tipo `Float`, el otro es convertido a `Float`.

- Si uno de los valores es de tipo `Fraction`, el otro es convertido a `Fraction`.

Estas reglas abarcan todos los casos donde los operandos son de un tipo numérico distinto. Las reglas implícitamente implementan la noción de una torre numérica @schemereport[p.~19] @pep3141, donde los tipos numéricos respetan la siguiente jerarquía (en orden descendente):

- `Float`
- `Fraction`
- `Integer`

Aunque realmente el tipo `Fraction` es el que puede expresar más números de todos los tipos numéricos, operar con números de punto flotante es usualmente más esperado y menos sorprendente que con fracciones. En efecto, así lo hacen las jerarquías en @schemereport y @pep3141. Esta es la razón de que `Float` esté al tope de la jerarquía.

=== Caracteres y cadenas

Cualquier concatenación que involucre un caracter tendrá como resultado una cadena. Es decir:

#figure(
```
assert({"ab"} = {'a' + 'b', 'a' + "b", "a" + 'b'})
```,
caption: "Conversión de caracteres."
)

Esta regla también aplica para la concatenación de un caracter consigo mismo, usando el operador `*`:

#figure(
```
assert({"aaa"} = {'a'*3, 3*'a'})
```,
caption: "Conversión de caracteres."
)

= Aspectos periféricos

Expand Down Expand Up @@ -1947,33 +1990,36 @@ La gramática mostrada es una referencia para describir la sintaxis de Komodo, p

Esta lista tiene todos los operadores infijos de Komodo, con su respectiva precedencia. Un operador con cierta precedencia va a ser agrupado antes que otro operador con menor precedencia.

#figure(
table(
columns: 2,
[Operador], [Precedencia],
[`:=`], [1],
[`in`], [2],
[`..`], [3],
[`||`], [4],
[`&&`], [5],
[`>`], [6],
[`>=`], [6],
[`<`], [6],
[`<=`], [6],
[`/=`], [6],
[`=`], [6],
[`^`], [7],
[`&`], [8],
[`<<`], [9],
[`>>`], [9],
[`-`], [10],
[`+`], [10],
[`/`], [11],
[`%`], [11],
[`*`], [11],
[`**`], [12],
),
caption: "Tabla de precedencias de Komodo.",
)
#{
show figure: set block(breakable: true)
figure(
table(
columns: 2,
[Operador], [Precedencia],
[`:=`], [1],
[`in`], [2],
[`..`], [3],
[`||`], [4],
[`&&`], [5],
[`>`], [6],
[`>=`], [6],
[`<`], [6],
[`<=`], [6],
[`/=`], [6],
[`=`], [6],
[`^`], [7],
[`&`], [8],
[`<<`], [9],
[`>>`], [9],
[`-`], [10],
[`+`], [10],
[`/`], [11],
[`%`], [11],
[`*`], [11],
[`**`], [12],
),
caption: "Tabla de precedencias de Komodo.",
)
}

#bibliography("ref.bib", title: "Referencias")

0 comments on commit 5b64f02

Please sign in to comment.