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