Commits

Anonymous committed a17b7e4

Update README; fix whitespace.

Comments (0)

Files changed (2)

     Symbol     ::= <<one or more alphanumeric characters>>.
     Number     ::= <<rational number in decimal format>>.
 
+All keywords in the `TimePrep` production are synonyms.  In the original
+vision, `after` and `by` were synonyms, but `before` was meant to actually
+cause the event on which the `caused before` clause was attached, before
+the event named in the clause.  However, unless the event being caused
+can somehow cancel the event that it's being caused before, there is no
+semantic difference between `before` and `after` when it comes to "when"
+the event is triggered.
+
 Portia
 ------
 
 This mechanism (in fact, an extended form of it) is included in version 2.0
 of the β-Juliet language itself, so no pre-processor is needed for it.
 
+Computational Power
+-------------------
+
+The state space of a system described in β-Juliet version 1.0 is always
+finite, so β-Juliet version 1.0 cannot be Turing-complete.  The state space
+of a system described using Portia and β-Juliet version 1.0 may be much,
+much bigger than one described using just β-Juliet version 1.0, but it is
+still finite.
+
+Since β-Juliet version 2.0 allows unbounded sets of events to be described,
+it is more likely that it is Turing-complete.
+
 Patterns
 --------
 
                       | SymbolName
                       .
 
+Extra conditions, however, are placed on `caused by` clauses.  Both the name
+of the event which is the cause, and the name of the event which is being
+caused, must be literal symbol strings, not patterns.
+
 Implementations
 ---------------
 
 The reference implementation of β-Juliet version 2.0, called `2iota`, is
 written in C.  It implements delays (when compiled as ANSI C they have
 second granularity; when compiled as C99 with POSIX, they have millisecond
-granularity.)  It does not, however, implement `caused after|before|by`
-clauses.
+granularity.)  It does not yet, however, properly implement `caused` clauses.
 void
 two_iota(struct scan_st *sc)
 {
-        caused_by = caused_by_table_new();
+	caused_by = caused_by_table_new();
 
-        decl(sc);
+	decl(sc);
 	while (tokeq(sc, ";")) {
 		scan(sc);
 		decl(sc);
 		if (tokeq(sc, "by") || tokeq(sc, "after")) {
 			scan(sc);
 			/* TODO: we're also going to have to check that this
-                        event's name is a literal.  If it's not,
-                        this makes no sense... */
+			event's name is a literal.  If it's not,
+			this makes no sense... */
 			ss = event_appl_literal(sc);
 			(void)caused_by_add(caused_by, ss, e);
 		} else {