BasesParserSLan/Src/ComoHeredar/README.md
2026-10-05 17:54:12 -05:00

43 lines
No EOL
2.4 KiB
Markdown

# Como heredar
En este doc explico como hacer tu propio parser usando el backend de BasesParserSLan con
los estilos del ecosistema TSN.
## Crea el repositorio \ Project
Usualmente en parsers yo suelo dividilro en 3 mqhs..
- Parser: IMplemnta la logica principal en una funcion Parse
- Defines: Define tablas, falgs, enumns (De tipos)
- Node: Se encarga de esa "interfaz" dom qeu el usuario accedera una vista al contexto (cinta)
Aparte de esto dependied del dominio dewl parser pro jeemplo si es YAML\TOML\JSON
hara flata un UnescapeEscape usando el backend de basesparserslan
UE ud puede definir 1 tabla s_unescape_table en la cual defina el caracter de ramplzao
o vlores centinela que el backend interpretara como unespcaes de "varios digitos"
tipo \U, \u, \x ... usando las macros proveidas pro TsnTables\UE
Entonces ud deifnida dicha talba y podra ya tener unas funciones de unescape para:
- Uchar buffer a string
- Uchar buffer a uchar[] (utf8)
- EscapePointer (para pointer acces)
## Parser en si
Normaltme el esitlo de parseo en el ecositmea TSN es asi:
1. Una talba que conveita los caracteres "brutos" atokens para un swicth
2. Sobre ese switch cada case seria un token a procesar
3. Para ir de estado 1 a estado 2 se usan macros intermadias que hacen el trabajao de saltar ws veiricar esutrct usando shifts y ands
(esto usando el siguiente token.. y crenaod un flag con 1<<tokeb que luego se valida frente a una mascara de tokens
permitidos para ese contexto..)
4. Y dentro de cada case iria la logica en si del parseo
COn esto se evita la recusion, etc.. aparte se neceista varias "pilas" como pociioens en la cinta o en raw (para substrings ) etc..
depende de como lo quiertas....
## Luego
Una vez tengas el parser viene hora de crear el nodo que por lo general en lenguaje sde isleriz casi siempre
existe el conepto de array\objeto\string\booleano\nulo\numero entonces se procia una base CNodelBase (o algo asi)
aparte de iteradores... luego ud lo extienda para numeros etc..
el tema es que no lo hice asi con numeros dado que pro ejemplo aveces con ToInt si el nopdo curr es string se puede hacer esa conversion
y ahi es donde se "jode" todo dado qeu el string es un caso intente daod uqe casi todos lo menaja n difernte..
por eso no quiero "generalizar" a algo.. cualuiert ufncion que toque strings la he dejado fuera (salvo
las key que por ahora son raw tal cvual sin escapar en el nodo de acceso auqneu via funcion tempaltes
podria meter algo de ayuda)