@allnulled/anylang
v1.0.1
Published
Sintaxis abierta que siempre devuelve objetos de arrays.
Readme
anylang
Sintaxis abierta que siempre devuelve objetos de arrays.
Editor en línea
Con open-editor puedes crear ficheros *.any y compilar:
Instalar
npm i -g @allnulled/anylangUso desde consola
Si lo instalas globalmente (--g) luego puedes:
anylang compile file1.any file2.any file3.anyY generaría los .json respectivos.
Uso desde API
Importar
En node.js:
require("@allnulled/anylang");En browser:
<script src="node_modules/@allnulled/anylang/anylang.js"></script>Usar
Una vez importado, tienes o en window o en global inyectada la variable AnylangParser, así que en ambos puedes hacer:
const ast = AnylangParser.parse("ya puedes parsear");Sintaxis
En general, la idea es que los paréntesis {}, [] y () pueden usarse para agrupar cosas.
Y el texto se puede partir en cachos con ;\n.
Y el párser te lo agrupa.
Estas son las normas, 2 realmente.
Explicación más profunda
Lo que hace el párser es agrupar texto + grupos lógicos.
Los grupos lógicos son los paréntesis.
Finalmente, el texto se puede romper con ;\n.
A la hora de presentarlo:
- Agrupa
textoygrupos lógicoscon un objeto, usandotextocomo propiedad, ygrupos lógicoscomo valor en forma de lista, con grupos de esta estructura igual. - Cada grupo lógico se separa en diferentes objetos.
- Pero los textos de un mismo grupo lógico se aplanan (flaten) en un objeto.
Esto es importante, porque esto significa que esta entrada:
object {1}
object {2}
object {3}
object {4}
object {5}Sacará esto:
{
"object": [
{
"5": []
}
]
}Así que ojo. Mientras entiendas esto, es bastante simple de intuir la estructura, y puedes iterar rápidamente con JavaScript.
Ejemplos
Uno de java:
clase Main {
public static void main (String [] args) {
System.out.println("Hola!");
}
}No es perfecto, pero algo te pilla:
{
"clase Main": [
{
"private void int wherever = 10": [],
"public static void main": [
{
"String": [
null
],
"args": []
},
{
"System.out.println": [
{
"\"Hola!\"": []
}
]
}
]
}
]
}Uno de JavaScript:
module.exports = function(a, b, c) {
let x = 100;
print("Ma whereva");
}Devuelve:
{
"module.exports = function": [
{
"a, b, c": []
},
{
"let x = 100": [],
"print": [
{
"\"Ma whereva\"": []
}
]
}
]
}Uno de SQL:
SELECT * FROM table WHERE (
columna1 = 'x' AND (
columna2 = 'y' OR
columna2 = 'z'
)
)Sacaría esto:
{
"SELECT * FROM table WHERE": [
{
"columna1 = 'x' AND": [
{
"columna2 = 'y' OR\n columna2 = 'z'": []
}
]
}
]
}Pero bueno. Para representar ideas guarras rápidamente.
Y al ver el JSON te haces una idea de una representación universal de tu idea.
Y si quieres, ya puedes usarlo, aunque no lo he hecho pensando en eso. Es la cosa de... poder expresar, ordenar y agrupar ideas con un lenguaje sin normas.
No es que se pueda parsear todo, evidente. Pero de paso, debería poder un poco.
Pero un poco. La idea es eso: expresar, ordenar y agrupar ideas en forma de texto.
