{"_id":"@allnulled/anylang","name":"@allnulled/anylang","dist-tags":{"latest":"1.0.1"},"versions":{"1.0.1":{"name":"@allnulled/anylang","version":"1.0.1","description":"Sintaxis abierta que siempre devuelve objetos de arrays.","main":"anylang.js","bin":{"anylang":"anylang.bin.js"},"scripts":{"build":"npx pegjs --format globals --export-var AnylangParser anylang.pegjs && node fix.js && npm test","test":"npx mocha test/test.js"},"keywords":[],"author":{"name":"allnulled"},"license":"WTFPL","gitHead":"4d3b8a7474e7fc0135ec2d260c331f0343044fca","_id":"@allnulled/anylang@1.0.1","_nodeVersion":"18.17.1","_npmVersion":"9.6.7","dist":{"integrity":"sha512-BwFB0mfc1fkG/jiA8aURZXXG3+tz48pXHsbJg9EcmjVjV2wbV+sGF9VfN1qt58lqcn6GJKDvlFGfH+k+4PfREg==","shasum":"6674515218cb6b8ab3076cc8f2e0436ba9c518f9","tarball":"https://registry.npmjs.org/@allnulled/anylang/-/anylang-1.0.1.tgz","fileCount":25,"unpackedSize":48713,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIGMyHduvd55T+mvoQ+GzsLge2OfI4clZT2pboN0VI5kVAiAspUOBAW9TEJ+HHn9nWMkdiis2nsJzZLnwCh7Xfz1y5A=="}]},"_npmUser":{"name":"allnulled","email":"todosanulados@gmail.com"},"directories":{},"maintainers":[{"name":"allnulled","email":"todosanulados@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/anylang_1.0.1_1736637040496_0.11919704898538686"},"_hasShrinkwrap":false}},"time":{"created":"2025-01-11T23:10:40.393Z","1.0.1":"2025-01-11T23:10:40.678Z","modified":"2025-01-11T23:10:40.940Z"},"maintainers":[{"name":"allnulled","email":"todosanulados@gmail.com"}],"description":"Sintaxis abierta que siempre devuelve objetos de arrays.","keywords":[],"author":{"name":"allnulled"},"license":"WTFPL","readme":"# anylang\n\nSintaxis abierta que siempre devuelve objetos de arrays.\n\n## Editor en línea\n\nCon **open-editor** puedes crear ficheros `*.any` y compilar:\n\n- [https://allnulled.github.io/open-editor](https://allnulled.github.io/open-editor)\n\n## Instalar\n\n```sh\nnpm i -g @allnulled/anylang\n```\n\n## Uso desde consola\n\nSi lo instalas globalmente (`--g`) luego puedes:\n\n```sh\nanylang compile file1.any file2.any file3.any\n```\n\nY generaría los `.json` respectivos.\n\n## Uso desde API\n\n### Importar\n\nEn node.js:\n\n```js\nrequire(\"@allnulled/anylang\");\n```\n\nEn browser:\n\n```html\n<script src=\"node_modules/@allnulled/anylang/anylang.js\"></script>\n```\n\n### Usar\n\nUna vez importado, tienes o en `window` o en `global` inyectada la variable `AnylangParser`, así que en ambos puedes hacer:\n\n```js\nconst ast = AnylangParser.parse(\"ya puedes parsear\");\n```\n\n## Sintaxis\n\nEn general, la idea es que los paréntesis `{}`, `[]` y `()` pueden usarse para agrupar cosas.\n\nY el texto se puede partir en cachos con `;\\n`.\n\nY el párser te lo agrupa.\n\nEstas son las normas, 2 realmente.\n\n### Explicación más profunda\n\nLo que hace el párser es agrupar `texto` + `grupos lógicos`. \n\nLos `grupos lógicos` son los paréntesis.\n\nFinalmente, el texto se puede romper con `;\\n`.\n\nA la hora de presentarlo:\n\n  - Agrupa `texto` y `grupos lógicos` con un objeto, usando `texto` como propiedad, y `grupos lógicos` como valor en forma de lista, con grupos de esta estructura igual.\n  - Cada grupo lógico se separa en diferentes objetos.\n  - Pero los textos de un mismo grupo lógico se aplanan (flaten) en un objeto.\n\n\nEsto es importante, porque esto significa que esta entrada:\n\n```any\nobject {1}\nobject {2}\nobject {3}\nobject {4}\nobject {5}\n```\n\nSacará esto:\n\n```json\n{\n  \"object\": [\n    {\n      \"5\": []\n    }\n  ]\n}\n```\n\nAsí que ojo. Mientras entiendas esto, es bastante simple de intuir la estructura, y puedes iterar rápidamente con JavaScript.\n\n## Ejemplos\n\nUno de java:\n\n```java\nclase Main {\n    public static void main (String [] args) {\n        System.out.println(\"Hola!\");\n    }\n}\n```\n\nNo es perfecto, pero algo te pilla:\n\n```json\n{\n  \"clase Main\": [\n    {\n      \"private void int wherever = 10\": [],\n      \"public static void main\": [\n        {\n          \"String\": [\n            null\n          ],\n          \"args\": []\n        },\n        {\n          \"System.out.println\": [\n            {\n              \"\\\"Hola!\\\"\": []\n            }\n          ]\n        }\n      ]\n    }\n  ]\n}\n```\n\nUno de JavaScript:\n\n```js\nmodule.exports = function(a, b, c) {\n    let x = 100;\n    print(\"Ma whereva\");\n}\n```\n\nDevuelve: \n\n```json\n{\n  \"module.exports = function\": [\n    {\n      \"a, b, c\": []\n    },\n    {\n      \"let x = 100\": [],\n      \"print\": [\n        {\n          \"\\\"Ma whereva\\\"\": []\n        }\n      ]\n    }\n  ]\n}\n```\n\nUno de SQL:\n\n```sql\nSELECT * FROM table WHERE (\n    columna1 = 'x' AND (\n        columna2 = 'y' OR\n        columna2 = 'z'\n    )\n)\n```\n\nSacaría esto:\n\n```sql\n{\n  \"SELECT * FROM table WHERE\": [\n    {\n      \"columna1 = 'x' AND\": [\n        {\n          \"columna2 = 'y' OR\\n        columna2 = 'z'\": []\n        }\n      ]\n    }\n  ]\n}\n```\n\nPero bueno. Para representar ideas guarras rápidamente.\n\nY al ver el JSON te haces una idea de una representación universal de tu idea.\n\nY 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.\n\nNo es que se pueda parsear todo, evidente. Pero de paso, debería poder un poco.\n\nPero un poco. La idea es eso: *expresar, ordenar y agrupar ideas en forma de texto*.","readmeFilename":"README.md"}