En/Je/On 2015-11-11 05:27, [email protected] [forth-es]
escribió / skribis / wrote :

>    Estoy tratando de traducir la palabra “decode” hasta el
>    FlashForth que tengo instalado en mi arduino atmega328.

La versión de `decode` que escribí para Afera es fig-Forth.  Tengo otra
versión modernizada que adapté después para mi sistema Solo Forth.
Probablemente te será más fácil adaptar esta última, después te la
preparo y publico el enlace.

>    --En lugar de “NFA“utilizo “c>n”. Espero que funcione.

Sí. Por lo que veo en el glosario
(http://www.flashforth.com/wordsAll.txt), `c>n` hace en FlashForth lo
mismo que `nfa` hace en el modelo fig-Forth.

>    --Pero al estudiar “ID.” No encuentro ninguna
>    correspondencia con FlashForth. Al buscar lo que hace
>    “ID.” leo: “Print a definition's name from its name field
>    address”. Y tampoco sé cómo construir una palabra que haga
>    lo mismo.

FlashForth tiene que tener un palabra para imprimir el nombre de una
palabra (aunque solo sea porque tiene `words`), pero no la encuentro en
el glosario.

El nombre que se usa para esto no está estandarizado. En los Forth
modernos se suele llamar `.id`, antes se solía llamar `id.`. No
encuentro algo parecido en el documento, ni con "name" en lugar de "id",
que también podría ser. Puede que no exista en FlashForth, y su función
esté integrada en `words`. O puede que no sea pública, que no tenga
cabecera.

Para salir de dudas podrías consultar a los autores o usuarios de
FlashForth.

Escribir `.id` no tiene dificultad pero hace falta saber cómo se guardan
las cabeceras de las palabras en el diccionario. Lo más habitual es que
el campo de nombres contenga una cadena contada, pero cuyo octeto de
longitud se usa también para guardar bitios de información (si la
palabra es immediata, si está completa, si es solo de compilación).  Por
lógica suelen ser los bitios más altos. Hay que quitarlos de enmedio con
una máscara. Como la longitud máxima de las palabras suele ser de 31
caracteres (00011111 en binario), generalmente esta definición te podría
funcionar:

  : .id  ( nfa -- )  ' c>n count 31 and type  ;

Pero no es seguro. Todo depende de cómo funcione interiormente
FlashForth y de cómo guarde las cabeceras de las palabras en el
diccionario. Esa información debería estar en la documentación.

Saludos.

-- 
Marcos Cruz
http://programandala.net

Responder a