Skip to content
This repository has been archived by the owner on Apr 4, 2018. It is now read-only.

Commit

Permalink
Add README and TODO.
Browse files Browse the repository at this point in the history
  • Loading branch information
threedaymonk committed Mar 23, 2012
1 parent 1878ce8 commit 02e0fca
Show file tree
Hide file tree
Showing 2 changed files with 60 additions and 0 deletions.
58 changes: 58 additions & 0 deletions README.md
@@ -0,0 +1,58 @@
Sibyl
=====

This is a parser and interpreter for smart answers that aims to address a few
challenges with our current embedded Ruby implementations, specifically:

* Verifying correctness: no cycles, dead ends, or unreachable nodes
* Retaining readability and terseness

It's named after the prophets of antiquity. Why Sibyl? Well, I could hardly
call it Oracle or Delphi, could I?

Syntax
------

The syntax is relatively simple, and consists of metadata, steps, and outcomes.
The grammar is specified in the file `lib/sibyl/parser.rb`; some examples
follow:

-- Metadata
metadata need 1660
metadata status published

-- Define a multiple-choice step
step multiple "step a"
option foo -> "step b"
option bar -> "step c"

-- Define a direct transition that sets a variable
step number "step c"
set x { input }
go -> "step d"

-- Choose a step based on a calculation
step number "step d"
set y { input }
go ->
if { y > x } -> "step e"
otherwise -> "step f"

-- or
step multiple "step f"
option baz ->
if { something? } -> "step g"
if { something_else? } -> "step h"
otherwise -> "step i"
option quuz -> "step j"

-- Define final steps
outcome "step j"

Usage
-----

require "sibyl/graph"
graph = Sibyl::Graph.new(source)
graph.validate! # raises an exception if the graph is incorrect
step = graph.walk(["yes", "a", "1"])
2 changes: 2 additions & 0 deletions TODO.txt
@@ -0,0 +1,2 @@
* Create input classes for input types to deserialise numbers, dates, etc.
* Expose expected input for use by web side.

0 comments on commit 02e0fca

Please sign in to comment.