Tras revisar un poco por encima las capacidades del DAAD, veo que fue rápidamente superado por los pawlike para DOS de los 90 (SINTAC o NMP), y por los actuales (Superglús, ngpwas).
Supongo que como JSJ tuvo un DAAD algunas cosas ya directamente no se le tuvieron que ocurrir, y al final acabaron en todos los parsers pawlike.
DAAD tenía un pequeño problema con la indirección, y es que por las razones que quedaron de manifiesto
aquí para el PAW, solo podía tener indirección en un parámetro, el primero, por lo que hay algunos condactos nuevos en DAAD que son copias de otro pero con los parametros cambiados, para poder hacer indireccion del segundo en lugar del primero. Por ejemplo COPYFF flag1 flag2 copia el contenido del flag1 en el flag2 mientras que COPYBF flag1 flag2 copia el contenido del flag2 en el flag1. También hay unos condactos BIGGER y SMALLER para comparar flags que no tendrían mucho sentido con indirección en ambos parámetros.
Además hay unos cuantos condactos dedicados a temas específicos que supongo que solo funcionarían en algunos interpretes, como el condacto WINDOW, WINSIZE, CENTRE, y algunos para vagos como el condacto SPACE (imprime un espacio) o DPRINT (para hacer el típico valor1+256*valor2). También habíia posibilidades de hacer un
goto mediante etiquetas y el comando SKIP, aunque mucho más limitado que lo que tenía por ejemplo NMP.
El único condacto que realmente veo interesante, y que replicaré en ngpaws y Superglús, es el condacto SYNONYM, que creo que funciona diferente a como funcionaba en SINTAC o a las entradas sinónimas que usaba NMP. En realidad Superglús y ngpaws, en su librería base, hacen uso de lago similar a lo que hace el condacto SYINONYM de DAAD, pero sin condacto):
SINTAC (un poco de memoria):
Código:
ECHAR GASOLINA SYNONYM LLENAR DEPOSITO
PRESENT oMoto
CARRIED oBidon
WRITELN "Llenas el depósito." <--- No recuerdo si había un write o un print o algo, sino un MESSAGE valdría
DONE
NMP:
Código:
- ECHAR GASOLINA
- LLENAR DEPOSITO
PRESENT oMoto
CARRIED oBidon
WRITELN "Llenas el depósito."
DONE
Como veis en ambos el modelo es similar, para una entrada concreta se admiten dos frases concretas:
Superglús/ngpaws:
Código:
ECHAR GASOLINA
LET 33 _voc_LLENAR
LET 34 _voc_DEPOSITO
LLENAR DEPOSITO
PRESENT oMoto
CARRIED oBidon
WRITELN "Llenas el depósito."
DONE
En Superglús y ngpaws no existe el soporte de entradas sinónimas, por lo que se hace el truco de cambiar el verbo y nombre de la frase. Esto que a priori parece más incómodo, y probalemente lo sea para casos como el del ejemplo, es tremendamente útil para funcionar en un modelo de acciones como el de Inform. Por ejemplo en la librería base de ngpaws podemos ver cosas como:
Código:
COGER TODO ; COGER TODO DE --> SACAR TODO DE
PREP DE
LET 33 &&_voc_SACAR
PONER TODO
PREP EN
LET 33 &&_voc_METER
VACIAR _
NOTEQ 51 255
PRESENT @51
ONOTZERO @51 aContainer
COPYFF 34 44
COPYFF 35 45
LET 33 &&_voc_SACAR
LET 34 &&_voc_TODO
LET 43 &&_voc_DE
Como veis en la práctica lo que hace la librería es primero revisar la orden del jugador y tratar de convertirla en los verbos básicos. Por ejemplo COGER DE-> SACAR, VACIAR xxx-->SACAR TODO DE xxxx, etc. Al final la librería solo tiene que atender a las acciones definitivas (SACAR, COGER, etc.)
Lo que me planteo es añadir el condacto SYNONYM a ngpaws y Superglús (como condacto plugin son 10 minutos) para mejorar la legibilidad de la librería base, cambiando esos
Código:
LET 33 &&_voc_SACAR
LET 34 &&_voc_TODO
por
Código:
SYNONYM SACAR TODO