forked from nique_372/BasesParserSLan
43 lines
2.4 KiB
Markdown
43 lines
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)
| |||
| |||
|