libtlafmt 0.4.1

A formatter library for TLA+ specs, core of tlafmt
Documentation
------------------------- MODULE ConfigFileGrammar --------------------------
EXTENDS BNFGrammars
-----------------------------------------------------------------------------
Letter == OneOf("abcdefghijklmnopqrstuvwxyz_ABCDEFGHIJKLMNOPQRSTUVWXYZ")
Num    == OneOf("0123456789")
LetterOrNum == Letter \cup Num
AnyChar     == LetterOrNum \cup OneOf("~!@#\\$%^&*-+=|(){}[],:;`'<>.?/")
SingularKW  == {"SPECIFICATION", "INIT", "NEXT", "VIEW", "SYMMETRY"}
PluralKW == 
  {"CONSTRAINT", "CONSTRAINTS", "ACTION-CONSTRAINT", "ACTION-CONSTRAINTS", 
   "INVARIANT", "INVARIANTS", "PROPERTY", "PROPERTIES"}
Keyword  == SingularKW \cup PluralKW \cup {"CONSTANT", "CONSTANTS"}
AnyIdent == LetterOrNum^* & Letter & LetterOrNum^*
Ident    == AnyIdent \ Keyword
-----------------------------------------------------------------------------
ConfigGrammar ==
  LET P(G) ==
        /\ G.File ::= G.Statement^+
        /\ G.Statement ::=   Tok(SingularKW) & Tok(Ident)
                           | Tok(PluralKW) & Tok(Ident)^*
                           |   Tok({"CONSTANT", "CONSTANTS"}) 
                             & (G.Replacement | G.Assignment)^*
        /\ G.Replacement ::= Tok(Ident) & tok("<-") & Tok(AnyIdent)
        /\ G.Assignment  ::= Tok(Ident) & tok("=") & G.IdentValue
        /\ G.IdentValue  ::=   
              Tok(AnyIdent) | G.Number | G.String
            |    tok("{") 
              &  (Nil | G.IdentValue & (tok(",") & G.IdentValue)^*)
              &  tok("}")
        /\ G.Number ::= (Nil | tok("-")) & Tok(Num^+)
        /\ G.String ::= tok("\"") & Tok(AnyChar^*) & tok("\"") 
   IN  LeastGrammar(P)
=============================================================================