{"_id":"logica","_rev":"50-7f6eef86635a824fca4fafe5c5d1e45a","name":"logica","description":"a compile-to-javascript predicate logic language","dist-tags":{"latest":"0.2.6"},"versions":{"0.1.0":{"name":"logica","version":"0.1.0","description":"a compile-to-javascript predicate logic language","main":"index.js","scripts":{"test":"mocha"},"author":{"name":"Agile Diagnosis, Inc"},"contributors":[{"name":"jden","email":"jason@denizac.org"}],"license":"MIT","dependencies":{"traverse":"~0.6.3"},"devDependencies":{"jison":"~0.3.12","heredoc":"~1.1.0","mocha":"~1.8.1","chai":"~1.4.2","lodash":"~1.0.0-rc.3"},"_id":"logica@0.1.0","dist":{"shasum":"74cc78e01fa9e81626321d10f7546aeb74e00826","tarball":"https://registry.npmjs.org/logica/-/logica-0.1.0.tgz","integrity":"sha512-YwgWql8pgrZQL6+Lh3rodUxgIqymgpbyr4x8S7CHd24ZkDFhj6Vu910nEeS+aICD9k2rPX1vBQW00rTjkU3/VQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIGwKZOlAvcFA38tq9gQItnBkZqox6Wfpga8y989fXkb/AiEA60vyzDohZECxfC6+oWwri3Wj+wbUVJCbLNbJKGh8hbo="}]},"_npmVersion":"1.1.70","_npmUser":{"name":"jden","email":"jason@denizac.org"},"maintainers":[{"name":"jden","email":"jason@denizac.org"}],"directories":{}},"0.1.1":{"name":"logica","version":"0.1.1","description":"a compile-to-javascript predicate logic language","keywords":["logic","predicate","boolean","jison","dsl","altjs","language"],"main":"index.js","scripts":{"test":"mocha"},"author":{"name":"Agile Diagnosis"},"contributors":[{"name":"jden","email":"jason@denizac.org"}],"license":"MIT","dependencies":{"traverse":"~0.6.3"},"devDependencies":{"jison":"~0.3.12","heredoc":"~1.1.0","mocha":"~1.8.1","chai":"~1.4.2","lodash":"~1.0.0-rc.3"},"_id":"logica@0.1.1","dist":{"shasum":"cb6c18b153d3379324b2aadf1427f147bc7ed2df","tarball":"https://registry.npmjs.org/logica/-/logica-0.1.1.tgz","integrity":"sha512-IvoQoD8neOEKLsQUaHhVpbD1GfUU+HFYbPun6+WsxFZ00ctJMoioz0LZwrKAWd8JFskSq2fKUVn//LssU3GlsA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIF3F7Ze0nyhnrYSyJ6NcdS9oZy2t+5nA+njCNBWGfaLOAiA/RKcpUAUSYbApVH3I+Uj5dBpi/EKZKOjGPgAyTSiZow=="}]},"_npmVersion":"1.1.70","_npmUser":{"name":"jden","email":"jason@denizac.org"},"maintainers":[{"name":"jden","email":"jason@denizac.org"}],"directories":{}},"0.2.0":{"name":"logica","version":"0.2.0","description":"a compile-to-javascript predicate logic language","keywords":["logic","predicate","boolean","jison","dsl","altjs","language"],"main":"index.js","scripts":{"test":"mocha"},"author":{"name":"Agile Diagnosis"},"contributors":[{"name":"jden","email":"jason@denizac.org"}],"license":"MIT","dependencies":{"traverse":"~0.6.3","lodash":"~1.0.0-rc.3"},"devDependencies":{"jison":"~0.3.12","heredoc":"~1.1.0","mocha":"~1.8.1","chai":"~1.4.2"},"_id":"logica@0.2.0","dist":{"shasum":"1790c782552cd39bd82c42d0d416ca5e61456558","tarball":"https://registry.npmjs.org/logica/-/logica-0.2.0.tgz","integrity":"sha512-+lzbBl1Qtb47WRSH0Tq/+BbSfOWLJGcO9U7nOulS4rDwWMDR6cdGHYJ6zCcfgTaVYQ7FU6d7cl43Lu9S0KG8Lg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCTe9s9Jr7zMCfyNFZ6gHYggQCarLmMePERZcfuFtOYqAIhAICWRKjylMsuuxhLzxQ/3C5Ujd86aCAqOCuLIoBUSNkK"}]},"_npmVersion":"1.1.70","_npmUser":{"name":"jden","email":"jason@denizac.org"},"maintainers":[{"name":"jden","email":"jason@denizac.org"}],"directories":{}},"0.2.1":{"name":"logica","version":"0.2.1","description":"a compile-to-javascript predicate logic language","keywords":["logic","predicate","boolean","jison","dsl","altjs","language"],"main":"index.js","scripts":{"test":"mocha"},"author":{"name":"Agile Diagnosis"},"contributors":[{"name":"jden","email":"jason@denizac.org"}],"license":"MIT","dependencies":{"traverse":"~0.6.3","lodash":"~1.0.0-rc.3"},"devDependencies":{"jison":"~0.3.12","heredoc":"~1.1.0","mocha":"~1.8.1","chai":"~1.4.2"},"_id":"logica@0.2.1","dist":{"shasum":"f150dbc6760d284c17caec8147e2bb9a35e05d5c","tarball":"https://registry.npmjs.org/logica/-/logica-0.2.1.tgz","integrity":"sha512-+r04tCbJpsTysLqBqgk6MNTPP1E/v48Pe7ATUN3GDVPR/Mjr19lcyNHSj5hZXWnYyFv37T6sT3lZE4kxlhdk7w==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIHeXZB8c7LS6Ilp2YfoYhA/9HcdS7hiiNn3eDYP5Y3SrAiEA2mI57WvJMF5Vz/lHcBN8cRXgeyd6+jAht1/uRO7Nndk="}]},"_npmVersion":"1.1.70","_npmUser":{"name":"jden","email":"jason@denizac.org"},"maintainers":[{"name":"jden","email":"jason@denizac.org"}],"directories":{}},"0.2.2":{"name":"logica","version":"0.2.2","description":"a compile-to-javascript predicate logic language","keywords":["logic","predicate","boolean","jison","dsl","altjs","language"],"main":"index.js","scripts":{"test":"mocha"},"author":{"name":"Agile Diagnosis"},"contributors":[{"name":"jden","email":"jason@denizac.org"}],"license":"MIT","dependencies":{"traverse":"~0.6.3","lodash":"~1.0.0-rc.3"},"devDependencies":{"jison":"~0.3.12","heredoc":"~1.1.0","mocha":"~1.8.1","chai":"~1.4.2"},"_id":"logica@0.2.2","dist":{"shasum":"69d1c817156da44609ba3d3986d12bdfd2449f55","tarball":"https://registry.npmjs.org/logica/-/logica-0.2.2.tgz","integrity":"sha512-XGvF2GHIcfHleJ8Rsy/C5EH49aFP4oQRG8z4VolgYjtRO5U8ANqwxBtStLJ/4AbquFwMLTbVEE+jc2u/8rYCVQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCdXBdmiP4Y27XWrT8e2fWaruqIpRYjw9+hff4eCOBtrAIhAJFN7I06AjOTE3N7GJtjETvrubP5Iy8QEGieJ9MLV8XX"}]},"_npmVersion":"1.1.70","_npmUser":{"name":"jden","email":"jason@denizac.org"},"maintainers":[{"name":"jden","email":"jason@denizac.org"}],"directories":{}},"0.2.3":{"name":"logica","version":"0.2.3","description":"a compile-to-javascript predicate logic language","keywords":["logic","predicate","boolean","jison","dsl","altjs","language"],"main":"index.js","scripts":{"test":"mocha"},"author":{"name":"Agile Diagnosis"},"contributors":[{"name":"jden","email":"jason@denizac.org"}],"license":"MIT","dependencies":{"traverse":"~0.6.3","lodash":"~1.0.0-rc.3"},"devDependencies":{"jison":"~0.3.12","heredoc":"~1.1.0","mocha":"~1.8.1","chai":"~1.4.2"},"_id":"logica@0.2.3","dist":{"shasum":"ebd999730f717972d563048824093d37e0738c53","tarball":"https://registry.npmjs.org/logica/-/logica-0.2.3.tgz","integrity":"sha512-sh0ZV0JzoCLhog1Nkp+BMAf4zkKahstXnWA2MnCNQ7b7Q9lUxieWjgfAgqroEZHDD8/vd92cGUlSFdNS4yViOQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQC4eQMyLCVIguinP4uDVRW/zkGbQXkH5xUbCboa/OkBxQIgZpWwMwG52CRpn37xZKwCMaq4Aqezl/n/L5w1bCewEXY="}]},"_npmVersion":"1.1.70","_npmUser":{"name":"jden","email":"jason@denizac.org"},"maintainers":[{"name":"jden","email":"jason@denizac.org"}],"directories":{}},"0.2.4":{"name":"logica","version":"0.2.4","description":"a compile-to-javascript predicate logic language","keywords":["logic","predicate","boolean","jison","dsl","altjs","language"],"main":"index.js","scripts":{"test":"mocha"},"author":{"name":"Agile Diagnosis"},"contributors":[{"name":"jden","email":"jason@denizac.org"}],"license":"MIT","repository":{"type":"git","url":"https://github.com/AgileDiagnosis/logica"},"dependencies":{"traverse":"~0.6.3","lodash":"~1.0.0-rc.3"},"devDependencies":{"jison":"~0.3.12","heredoc":"~1.1.0","mocha":"~1.8.1","chai":"~1.4.2"},"_id":"logica@0.2.4","dist":{"shasum":"ab09c2f6ae650c862cb0f7b01576f0cf410968ac","tarball":"https://registry.npmjs.org/logica/-/logica-0.2.4.tgz","integrity":"sha512-hY6QsLEKTkymbjgdL3LcXb75zHYxEKCXv8We5+nPaBsXdlMtRbsmGO0R0y8dcMGqmwr9lenJI9RELpqC1210Sg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDkCXIe7Mbm+5Oz6tLpwA2BJbrcjZCt7ghSyrVsJJsBVgIhANnmzRtBjtK3jhif2gkwcL1DO+nB8EntQb/I547L+wpC"}]},"_npmVersion":"1.1.70","_npmUser":{"name":"jden","email":"jason@denizac.org"},"maintainers":[{"name":"jden","email":"jason@denizac.org"}],"directories":{}},"0.2.5":{"name":"logica","version":"0.2.5","description":"a compile-to-javascript predicate logic language","keywords":["logic","predicate","boolean","jison","dsl","altjs","language"],"main":"index.js","scripts":{"test":"mocha"},"author":{"name":"Agile Diagnosis"},"contributors":[{"name":"jden","email":"jason@denizac.org"}],"license":"MIT","repository":{"type":"git","url":"https://github.com/AgileDiagnosis/logica"},"dependencies":{"traverse":"~0.6.3","lodash":"~1.0.0-rc.3"},"devDependencies":{"jison":"~0.3.12","heredoc":"~1.1.0","mocha":"~1.8.1","chai":"~1.4.2"},"_id":"logica@0.2.5","dist":{"shasum":"26b1c053377e1fd154c9554686dde384408e2da7","tarball":"https://registry.npmjs.org/logica/-/logica-0.2.5.tgz","integrity":"sha512-WgkuPKXrMmWLAl73Vn2KJmpnNvY6meuHmCPwVTf47MPG9GNi7JDRtrmZI68/SOSFS42Nh6RwTUCux8hR0qvLRA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIFIkaf77jUggG+hVaWcmBa+QDX/GACO7UxOKoItVaAk8AiA0Mv4K6sbKOg4gXYTEUOX50z8QlvQam/XKIjuPzbvOKw=="}]},"_npmVersion":"1.1.70","_npmUser":{"name":"jden","email":"jason@denizac.org"},"maintainers":[{"name":"jden","email":"jason@denizac.org"}],"directories":{}},"0.2.6":{"name":"logica","version":"0.2.6","description":"a compile-to-javascript predicate logic language","keywords":["logic","predicate","boolean","jison","dsl","altjs","language"],"main":"index.js","scripts":{"test":"mocha"},"author":{"name":"Agile Diagnosis"},"contributors":[{"name":"jden","email":"jason@denizac.org"}],"license":"MIT","repository":{"type":"git","url":"https://github.com/AgileDiagnosis/logica"},"dependencies":{"traverse":"~0.6.3","lodash":"~1.0.0-rc.3"},"devDependencies":{"jison":"~0.3.12","heredoc":"~1.1.0","mocha":"~1.8.1","chai":"~1.4.2"},"_id":"logica@0.2.6","dist":{"shasum":"dac51d4893639aedcc81022809b109f78e022788","tarball":"https://registry.npmjs.org/logica/-/logica-0.2.6.tgz","integrity":"sha512-umblG53TpZfhIy5gm0S6MB1OT2FLFg3PeUSUbGepk/p6OrlsRoO4xQFjLfDqx/jByupHfAjouIPj13HUTygItg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCICdoFoong2BiaZziyBDSWlR2DU/lwOYMM66/v110z6EhAiBkyoUXJyC75LZOdTf5tuCUEAhvb3U89AbHHEtzNgYtRQ=="}]},"_npmVersion":"1.1.70","_npmUser":{"name":"jden","email":"jason@denizac.org"},"maintainers":[{"name":"jden","email":"jason@denizac.org"}],"directories":{}}},"readme":"# logica\r\na compile-to-javascript predicate logic language\r\n\r\nnote: this is a preview public release, so documentation is a bit sparse right now.\r\n\r\nlogica is a language for expressing [Boolean algebra](http://en.wikipedia.org/wiki/Boolean_algebra). It's clean syntax makes it easy for non-programmers and domain experts to express complex logic and conditional knowledge.\r\n\r\n* flexible syntax\r\n* interpreted or compile-to-javascript\r\n* all operators support multiple arguments (except `not`)\r\n* extensible with custom predicate operators\r\n\r\n## basic usage\r\n\r\nin logica, you create predicates (functions which result in a `true` or `false` value). The simplest predicate is a literal boolean value. That is, the following is valid logica:\r\n\r\n    true\r\n\r\nThis, clearly, will always evaluate to true. Of course, you probably want more complex things:\r\n\r\n    (OR\r\n      (Today = \"wednesday\")\r\n      (Today = \"mittwoch\")\r\n    )\r\n\r\nWhitespace doesn't matter, but it can improve usability. Optionally, commas can be used to separate the various pieces. We could also write:\r\n\r\n    (OR,(Today=\"wednesday\"),(=,Today,\"mittwoch\"))\r\n\r\nHere, we're using a symbolic variable, `Today`, and comparing it to the literal values `wednesday` and `mittwoch`.\r\n\r\nIn JavaScript, you might write:\r\n\r\n    Today === \"wednesday\" || Today === \"mittwoch\"\r\n\r\nNotice the parentheses? You can nest predicates as deeply as you'd like.\r\n\r\nNote that since this predicate references `Today`, we can't evaluate it without a value for `Today`. It might help to think about it like this: in logica, you're writing a function. Each symbolic variable you use requires a corresponding argument. When using logica in JavaScript, these are supplied as properties on a `state` object which is passed in.\r\n\r\nPutting it all together,\r\n\r\n    var logica = require('logica')\r\n\r\n    var source = '(OR (Today = \"wednesday\"), (Today = \"mittwoch\"))'\r\n\r\n    logica.exec(source, {Today: 'mittwoch'})\r\n    // => true\r\n\r\n    logica.exec(source, {Today: 'wednesday'})\r\n    // => true\r\n\r\n    logica.exec(source, {Today: 'tuesday'})\r\n    // => false\r\n\r\nNow that you've got the basics, check out the `/examples/` folder for more.\r\n\r\nA slightly more elaborate (and contrived, but valid) predicate might be:\r\n\r\n    # a logica program\r\n\r\n    (AND\r\n      (foo = 'baz')\r\n      faa\r\n      (NOT (NOT true))\r\n\r\n      (pizzas >= 23)\r\n      ('cheese' IN toppings)\r\n      (and (foo = bar))\r\n    )\r\n\r\n## using the compiler\r\n\r\nlogica can be compiled to JavaScript sourcecode so that the overhead of parsing only has to occur once. For example, a server can pre-compile logica predicates for use on a client application.\r\n\r\nin node, simply:\r\n\r\n    var compile = require('logica')\r\n\r\n    var jsCode = compile(sourceString, options);\r\n\r\n## using a compiled function\r\n\r\nThe compiler generates JavaScript sourcecode as a string. This intermediate form expects certain functions to exist in the runtime environment implementing logica operators.\r\n\r\nThe easiest way to consume this source is using the hydrate function:\r\n\r\n    var hydrate = require('logica/hydrate')\r\n    var logicaFn hydrate(compiledLogicaSource)\r\n\r\n    var state = { foo: true, bar: false }\r\n\r\n    var result = logicaFn(state)\r\n\r\nHydrate is a standalone module with no dependencies. You can use it, for example, to execute functions clientside that were precompiled on the server.\r\n\r\n## compile options\r\nYou can supply and `opts` object as the optional second argument of `compile`.\r\n\r\n- `prettyPrint`: boolean (default false). If true, will generate code with line breaks and indentation\r\n\r\n## examples\r\n\r\nSee the `/examples` folder. Files ending in `.logica` are plain logica source files.\r\n\r\n## running the unit tests\r\n\r\n    $ make test\r\n\r\n## hacking on the parser\r\n\r\nlogica's parser is implemented in [jison](http://zaach.github.com/jison/). The lexer and parser definitions are implemented in the file `logica.jison`, which generates `parser.js`. This file will get overwritten - do not make modifications to this file. Instead, modifications can be made in `logica.jison` itself or in `postParser.js`, which is just JavaScript.\r\n\r\nTo generate `parser.js`:\r\n\r\n    $ make\r\n\r\n## contributors\r\nJason Denizac - jden - <jason@denizac.org>\r\n\r\n## license\r\nMIT (c) 2013 Agile Diagnosis, Inc.\r\nSee LICENSE.md","maintainers":[],"time":{"modified":"2022-06-19T13:54:31.757Z","created":"2013-01-31T06:58:05.774Z","0.1.0":"2013-01-31T06:58:06.715Z","0.1.1":"2013-01-31T10:51:28.569Z","0.2.0":"2013-02-03T23:12:09.241Z","0.2.1":"2013-02-03T23:23:53.160Z","0.2.2":"2013-02-04T00:19:10.446Z","0.2.3":"2013-02-04T01:15:56.528Z","0.2.4":"2013-02-04T02:30:47.476Z","0.2.5":"2013-02-04T08:01:28.814Z","0.2.6":"2013-02-04T11:46:11.507Z"},"author":{"name":"Agile Diagnosis"},"repository":{"type":"git","url":"https://github.com/AgileDiagnosis/logica"},"users":{"agilediagnosis":true},"readmeFilename":"README.md","keywords":["logic","predicate","boolean","jison","dsl","altjs","language"],"contributors":[{"name":"jden","email":"jason@denizac.org"}],"license":"MIT"}