{"_id":"@alu0100886306/egg","_rev":"3-58aec331ac1c32bdaa1574fea26aa385","name":"@alu0100886306/egg","dist-tags":{"latest":"1.2.3"},"versions":{"1.2.1":{"name":"@alu0100886306/egg","version":"1.2.1","description":"[![Build Status](https://travis-ci.org/ULL-ESIT-PL-1617/egg.svg?branch=master)](https://travis-ci.org/ULL-ESIT-PL-1617/egg) [![npm version](https://badge.fury.io/js/%40crguezl%2Feloquentjsegg.svg)](https://badge.fury.io/js/%40crguezl%2Feloquentjsegg)","main":"lib/eggvm.js","scripts":{"test":"mocha","start":"./bin/egg.js examples/two.egg","compile":"./bin/eggc.js examples/two.egg && ./bin/evm.js examples/two.egg.evm"},"bin":{"egg":"./bin/egg.js","eggc":"./bin/eggc.js","evm":"./bin/evm.js"},"repository":{"type":"git","url":"git+https://github.com/ULL-ESIT-PL-1617/egg.git"},"keywords":["parsing","lisp"],"author":"","license":"ISC","bugs":{"url":"https://github.com/ULL-ESIT-PL-1617/egg/issues"},"homepage":"https://github.com/ULL-ESIT-PL-1617/egg#readme","devDependencies":{"gulp-shell":"^0.6.5","mocha":"^5.2.0","should":"^13.2.1"},"dependencies":{"sinon":"^7.3.2","xregexp":"^4.2.4"},"gitHead":"78b7a8a5ca05b8c864ac3fe80c8332feec439ee7","_id":"@alu0100886306/egg@1.2.1","_npmVersion":"6.5.0","_nodeVersion":"11.9.0","_npmUser":{"name":"alu0100886306","email":"alu0100886306@ull.edu.es"},"dist":{"integrity":"sha512-nsiK7V7wauFhLtFmB2MHIlG7rWnjxgpqg9kG9Njl+yrBqRIFa2j0rvgCOVrFZo4j4+NPbQUFdidXFGO1Qe6wZA==","shasum":"3e15fb2a268b5b0e470bc87e56bd08c91b68653a","tarball":"https://registry.npmjs.org/@alu0100886306/egg/-/egg-1.2.1.tgz","fileCount":48,"unpackedSize":34874,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcy/YpCRA9TVsSAnZWagAAQ54P/jEsxy15V2HF+TGkuBiV\nkg0isCCvyrtQ+FT5eBGuuWSFwfqiPyfzd4g640Ng34PO1B5NYS8wKQr7Q7o6\nSJaXjtt9STl0VWhi/37YYdA162+wiiwDH+UEIKsww+D+qp5Ttb/1CoPa05ph\nXx109j1d1+BFRO7dw1ZTbqA3zFoMsndJDo+q99YiegTVAVR4x2Gy4bH5kStJ\n2IOwzgSdP5DYy5JQqniLmwoKo+JW9z8yPT+tGjHmkDWL/M3/Zxq8XfFai9I5\ns8AH434TkNRuDpoFb1UJ/5jcXR2aZ9yQlKy7m9KM3TI+Z4rH+EmJfsUztffO\nDMpys/3DNZMUKYG7zTm0vOYUVQAh4ePz9eSTJI1LaxSTmXjXat83gEd3qmhr\nh0FFF6KWSyKmV0aixLsw4Yj5RNv/rJjuZjtj+ako/WurjnJ71Lxhmaw4plBC\nBGijmvSWzP+vEBFp2JdGwwY7lromwDW5SuRxLu5a+fTZMTJaCH65UtfeUq5/\n21frzknWPwFMB7SwMuZL2vVjHQ42HuVcFLp6ScR1MmuGIwukRNhUm44wVv9W\ncOlV6SyaDPoxwLU9h26Iw78+Az53nZ6RlELzl26htcDnxerep+gkQmPH11V/\nzY1uM7TsWvN2PLl3yevFj/mXb+XY+RhkxohIkDJS93+rcSLxHUJ8v9mrjkru\nil5r\r\n=gugo\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIGOh+jRsRrqO41+PxeyScUaSFObQdfjX37YMtt6/zIxjAiEAtoP0AkdtRNEq6D3xbpq7LNHNkpidCQZ+Lg/WFvczibU="}]},"maintainers":[{"name":"alu0100886306","email":"alu0100886306@ull.edu.es"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/egg_1.2.1_1556870697107_0.40408546663540035"},"_hasShrinkwrap":false},"1.2.2":{"name":"@alu0100886306/egg","version":"1.2.2","description":"[![Build Status](https://travis-ci.org/ULL-ESIT-PL-1617/egg.svg?branch=master)](https://travis-ci.org/ULL-ESIT-PL-1617/egg) [![npm version](https://badge.fury.io/js/%40crguezl%2Feloquentjsegg.svg)](https://badge.fury.io/js/%40crguezl%2Feloquentjsegg)","main":"lib/eggvm.js","scripts":{"test":"mocha","start":"./bin/egg.js examples/two.egg","compile":"./bin/eggc.js examples/two.egg && ./bin/evm.js examples/two.egg.evm"},"bin":{"egg":"./bin/egg.js","eggc":"./bin/eggc.js","evm":"./bin/evm.js"},"repository":{"type":"git","url":"git+https://github.com/ULL-ESIT-PL-1617/egg.git"},"keywords":["parsing","lisp"],"author":"","license":"ISC","bugs":{"url":"https://github.com/ULL-ESIT-PL-1617/egg/issues"},"homepage":"https://github.com/ULL-ESIT-PL-1617/egg#readme","devDependencies":{"gulp-shell":"^0.6.5","mocha":"^5.2.0","should":"^13.2.1"},"dependencies":{"sinon":"^7.3.2","xregexp":"^4.2.4"},"gitHead":"d60001d11384ef0e5d07ccbaba5849bd396412c5","_id":"@alu0100886306/egg@1.2.2","_npmVersion":"6.5.0","_nodeVersion":"11.9.0","_npmUser":{"name":"alu0100886306","email":"alu0100886306@ull.edu.es"},"dist":{"integrity":"sha512-il+UT3wX2NjuIH0/H+g/k8Q5OYQdIRHMp/doo4UaZoih+LHhYFeApjqFFjJ8hMVaCOdEnkJvD3IKp7GBlAQP0A==","shasum":"945a552214e4981abd1f3f9e474d1201192d8a17","tarball":"https://registry.npmjs.org/@alu0100886306/egg/-/egg-1.2.2.tgz","fileCount":48,"unpackedSize":34842,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJc0z1tCRA9TVsSAnZWagAA614P/2EWDbvejauRTIVRhJAQ\n9Gdt8coqN04qKdNR23vulsQCooIvcuCnZtxrLsjIJy8KjuGmF08Vl+7FfGcv\nyh4122xhBFncTHmLL/5UjO1JLk4GEy1bvXXLZQzVADYozkBm9GJnYwXAcbh2\nHRsaCdCFcVrPmAd3KLEkR5cj7UkInXSNJmICwZRo5yk72E9wHBQxM9XYe3DR\n6M26eJVs/j9/WS8QzVXRulSUtqV2Xq+6coDkLusm5OH9ObOWMV2fYTnioMTo\nrkdje+hd+vCnWg9BFYTWP7ebqEUM67W0LLYlgBYPDX5sMVCc3/I5yMFGmHMs\nyOQff9Y5U2hISI3/efkoHyx1DRe3ULMi/SITNinkUeQEIVQR7B0qbGE3Lyhg\nAfBwlVg9OD8ueGfcN4uDkwsQVrE/aYAVNNF39YmtbRuoDW3AQ5K6eMaswRIn\nsmWotsBkPSb0+HTE6LpkKxAqj5FfyJgPrlKFrCCk3oTRHAUsMowmou0d2Ws+\n5TMnGPyaDwIhIhVKY2kjSFeVDwXTgL7t2mbsxWwao08O4k4DwFo+mRwAaFA1\nPgYMRm8zucfbAhnIeuI3YqvvAWfjYcmScY3YfA4Ch1XlFyIkZp6lfF8vnPgW\nGi42Q9mh9Zh/odVrTggFZCZN6REwx8W4FPVP9nEblgtYvV7Fo9th20o11bvt\n7+yo\r\n=yJHS\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCNIpRuUtjZj/DfDY5q7GU4CBx+z+CpOLgr8H+pT/ny5AIgGye1OU/z7h/bFWif5Zx7Cb4jPQNghu48JkyynTiKSpo="}]},"maintainers":[{"name":"alu0100886306","email":"alu0100886306@ull.edu.es"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/egg_1.2.2_1557347692929_0.21487340843547487"},"_hasShrinkwrap":false},"1.2.3":{"name":"@alu0100886306/egg","version":"1.2.3","description":"[![Build Status](https://travis-ci.org/ULL-ESIT-PL-1617/egg.svg?branch=master)](https://travis-ci.org/ULL-ESIT-PL-1617/egg) [![npm version](https://badge.fury.io/js/%40crguezl%2Feloquentjsegg.svg)](https://badge.fury.io/js/%40crguezl%2Feloquentjsegg)","main":"lib/eggvm.js","scripts":{"test":"mocha","start":"./bin/egg.js examples/two.egg","compile":"./bin/eggc.js examples/two.egg && ./bin/evm.js examples/two.egg.evm"},"bin":{"egg":"./bin/egg.js","eggc":"./bin/eggc.js","evm":"./bin/evm.js"},"repository":{"type":"git","url":"git+https://github.com/ULL-ESIT-PL-1617/egg.git"},"keywords":["parsing","lisp"],"author":"","license":"ISC","bugs":{"url":"https://github.com/ULL-ESIT-PL-1617/egg/issues"},"homepage":"https://github.com/ULL-ESIT-PL-1617/egg#readme","devDependencies":{"gulp-shell":"^0.6.5","mocha":"^5.2.0","should":"^13.2.1"},"dependencies":{"sinon":"^7.3.2","xregexp":"^4.2.4"},"gitHead":"e59e39c055f642f56256affd29f8c51e2cc68476","_id":"@alu0100886306/egg@1.2.3","_npmVersion":"6.5.0","_nodeVersion":"11.9.0","_npmUser":{"name":"alu0100886306","email":"alu0100886306@ull.edu.es"},"dist":{"integrity":"sha512-fud3O74dwSYG66vZL+QGX1ZbpWjuCeeMaO46r61fRusZqqdB9XSrSzAGQy2sXm2Z07YwVDqhPDHXj8jA7AuvnQ==","shasum":"92f1cf0a01b4f39af5e8b7cf5abc007e12df8766","tarball":"https://registry.npmjs.org/@alu0100886306/egg/-/egg-1.2.3.tgz","fileCount":48,"unpackedSize":34836,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJc00RpCRA9TVsSAnZWagAAXkYP/15FnqqzIG2YJDBeddw8\n3wrjYjbSdC9q/zJflE0reiN8S9s83GuVTxxVvetfPHmsF4oz1UHcAQricE1n\nwgAPL8Rc77izJO87lE5JwP7jZweI3314vmZ8Ry74bjEuBoeg0JfxQt7wh1Fv\nS+dTRHJMvL1kMD8kfmRWxzcx1LIb7pUrPQcSzkqTX+Xgafzj7RN0hyhmHx7Y\ni3WAW2DOq/qKXKnJAxhMM4uIfa0AguLW9laX7mDOqV/2UhB/NIXZsYqs5F1N\n9bqps5b9D2n64D0Eq4ps//v0DXHFabIQTfFh4r0ZIulKIQAo6ORFUY6fSqbE\nGOEh7MnvvMzCbgKfxZYnm87Hhy7KAMJs+rmBo4jwkRiZe4ut6qvpqme1dWfW\nYwUR1nQ/o3cYjLCEVnN82rK0kZxPrD6FO/vhvOJ0918wNjw9UY9l8ynOX59P\n6PQMXDBFk46lTxH7Ukb0R46vmzyRYk60nxJj2r3A+RhYPlf/6fe/I2iRhY9K\nyvhL6H7R4aCj6hbpmDZTihYwnw1eDDQGVeS/jGyAyPWqZb1lKKTYFdOEKGc1\nwAmnIHylptj/2MVE3t6cu9xXpc1J4OK8XRXMYW+bRjWw9OAc/pntzMvNyI7m\nhBofmJMJy7EGO67/jcAAVk3tz7gbL1YcHevcSBWt0oN14yU1LVYzKjY7V/kA\n4lIa\r\n=tuwa\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEMCH2W0N1dV7JKfoZwjpPEOcGBTIe3xq76RIFpLzBP8CZMCIGZkGdoeLaAIptPrWvQC40BTi0oQ/yC+VLeO71aY0Vdm"}]},"maintainers":[{"name":"alu0100886306","email":"alu0100886306@ull.edu.es"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/egg_1.2.3_1557349480776_0.008429325094101436"},"_hasShrinkwrap":false}},"time":{"created":"2019-05-03T08:04:57.078Z","1.2.1":"2019-05-03T08:04:57.208Z","modified":"2022-04-04T13:40:50.991Z","1.2.2":"2019-05-08T20:34:53.196Z","1.2.3":"2019-05-08T21:04:40.887Z"},"maintainers":[{"name":"alu0100886306","email":"alu0100886306@ull.edu.es"}],"description":"[![Build Status](https://travis-ci.org/ULL-ESIT-PL-1617/egg.svg?branch=master)](https://travis-ci.org/ULL-ESIT-PL-1617/egg) [![npm version](https://badge.fury.io/js/%40crguezl%2Feloquentjsegg.svg)](https://badge.fury.io/js/%40crguezl%2Feloquentjsegg)","homepage":"https://github.com/ULL-ESIT-PL-1617/egg#readme","keywords":["parsing","lisp"],"repository":{"type":"git","url":"git+https://github.com/ULL-ESIT-PL-1617/egg.git"},"bugs":{"url":"https://github.com/ULL-ESIT-PL-1617/egg/issues"},"license":"ISC","readme":"[![Build Status](https://travis-ci.org/ULL-ESIT-PL-1617/egg.svg?branch=master)](https://travis-ci.org/ULL-ESIT-PL-1617/egg)\n[![npm version](https://badge.fury.io/js/%40crguezl%2Feloquentjsegg.svg)](https://badge.fury.io/js/%40crguezl%2Feloquentjsegg)\n\n### Code from Eloquent JS. Chapter 11. Project: A Programming Language\n\n* [Eloquent JS. Chapter 11. Project: A Programming Language](http://eloquentjavascript.net/11_language.html)\n* [As an npm module](https://www.npmjs.com/package/@crguezl/eloquentjsegg)\n* [gist to check the npm module](https://gist.github.com/crguezl/8dfcaa01a0377dead374bc35c462c29d)\n\n### Grammar\n\n```Yacc\n\nexpression: STRING\n          | NUMBER\n          | WORD apply \n\napply: /* vacio */\n     | '(' (expression ',')* expression? ')' apply\n\n\nWHITES = /^(\\s|[#;].*|\\/\\*(.|\\n)*?\\*\\/)*/;\nSTRING = /^\"((?:[^\"\\\\]|\\\\.)*)\"/;\nNUMBER = /^([-+]?\\d*\\.?\\d+([eE][-+]?\\d+)?)/;\nWORD   = /^([^\\s(),\"]+)/;\n```\n\n### AST\n\n* Expressions of type \"VALUE\" represent literal strings or numbers. \nTheir `value` property contains the string or number value that they represent.\n\n* Expressions of type \"WORD\" are used for identifiers (names). Such objects have a `name` property that holds the identifier’s name as a string. \n* Finally, \"APPLY\" expressions represent applications. They have an `operator` property that refers to the expression that is being applied, and an `args` property that holds an array of argument expressions.\n\n```\nast: VALUE{value: String | Number}\n   | WORD{name: String}\n   | APPLY{operator: ast, args: [ ast ...]}\n```\n\nThe `>(x, 5)` would be represented like this:\n\n```bash\n$ cat greater-x-5.egg \n>(x,5)\n$ ./eggc.js greater-x-5.egg \n$ cat greater-x-5.egg.evm \n{\n  \"type\": \"apply\",\n  \"operator\": {\n    \"type\": \"word\",\n    \"name\": \">\"\n  },\n  \"args\": [\n    {\n      \"type\": \"word\",\n      \"name\": \"x\"\n    },\n    {\n      \"type\": \"value\",\n      \"value\": 5\n    }\n  ]\n}\n```\n\n### Examples\n\n* [Directory with examples](https://github.com/ULL-ESIT-PL-1617/egg/tree/master/examples)\n\n### Instalation\n\n```\n$ npm i -g @crguezl/eloquentjsegg\n...\n```\n\n### Executables\n\n* `egg` \n    - Runs an egg program: `egg examples/two.egg` compiles the source onto the AST and interprets the AST\n\n```\n$ cat one.egg\ndo(\n  define(x, 4),\n  define(setx, fun(val, \n      set(x, val)\n    )\n  ),\n  setx(50),\n  print(x)\n)\n$ egg one.egg\n50\n```\n\n* `eggc`\n    - Compiles the input program to produce a JSON containing the tree: `eggc examples/two.egg` produces the JSON file `examples/two.egg.evm`\n* `evm` \n    - Egg Virtual Machine. Runs the tree: `evm examples/two.egg.evm`\n```\n$ eggc one.egg\n$ ls -ltr | tail -1\n-rw-r--r--  1 casiano  wheel  1656 19 mar 08:05 one.egg.evm\n$ evm one.egg.evm \n50\n```\n\nHere is the tree in JSON format for the former `one.egg` program:\n\n```\n$ cat one.egg.evm\n{\n  \"type\": \"apply\",\n  \"operator\": {\n    \"type\": \"word\",\n    \"name\": \"do\"\n  },\n  \"args\": [\n    {\n      \"type\": \"apply\",\n      \"operator\": {\n        \"type\": \"word\",\n        \"name\": \"define\"\n      },\n      \"args\": [\n        {\n          \"type\": \"word\",\n          \"name\": \"x\"\n        },\n        {\n          \"type\": \"value\",\n          \"value\": 4\n        }\n      ]\n    },\n    {\n      \"type\": \"apply\",\n      \"operator\": {\n        \"type\": \"word\",\n        \"name\": \"define\"\n      },\n      \"args\": [\n        {\n          \"type\": \"word\",\n          \"name\": \"setx\"\n        },\n        {\n          \"type\": \"apply\",\n          \"operator\": {\n            \"type\": \"word\",\n            \"name\": \"fun\"\n          },\n          \"args\": [\n            {\n              \"type\": \"word\",\n              \"name\": \"val\"\n            },\n            {\n              \"type\": \"apply\",\n              \"operator\": {\n                \"type\": \"word\",\n                \"name\": \"set\"\n              },\n              \"args\": [\n                {\n                  \"type\": \"word\",\n                  \"name\": \"x\"\n                },\n                {\n                  \"type\": \"word\",\n                  \"name\": \"val\"\n                }\n              ]\n            }\n          ]\n        }\n      ]\n    },\n    {\n      \"type\": \"apply\",\n      \"operator\": {\n        \"type\": \"word\",\n        \"name\": \"setx\"\n      },\n      \"args\": [\n        {\n          \"type\": \"value\",\n          \"value\": 50\n        }\n      ]\n    },\n    {\n      \"type\": \"apply\",\n      \"operator\": {\n        \"type\": \"word\",\n        \"name\": \"print\"\n      },\n      \"args\": [\n        {\n          \"type\": \"word\",\n          \"name\": \"x\"\n        }\n      ]\n    }\n  ]\n}\n```\n### Using it as a library\n\n```js\n> egg = require('@crguezl/eloquentjsegg')\n{ run: [Function: run],\n  runFromFile: [Function: runFromFile],\n  runFromEVM: [Function: runFromEVM],\n  parser: \n   { getProgram: [Function: getProgram],\n     lex: [Function: lex],\n     parse: [Function: parse],\n     parseApply: [Function: parseApply],\n     parseExpression: [Function: parseExpression],\n     parseFromFile: [Function: parseFromFile],\n     setProgram: [Function: setProgram] } }\n> parser = egg.parser\n> parser.parse('def(x,4)')\n{ type: 'apply',\n  operator: { type: 'word', name: 'def' },\n  args: [ { type: 'word', name: 'x' }, { type: 'value', value: 4 } ] }\n```\n\n\n### Enlaces a parseINI\n* [NPM](https://www.npmjs.com/package/@alu0100886306/parseini)\n* [GitHub](https://github.com/alu0100886306/parseINI)\n","readmeFilename":"README.md"}