module fostr imports Common context-free start-symbols Start context-free sorts Start LineSeq Line OptTermEx TermExLst TermEx Ex context-free syntax Start.TopLevel = LineSeq LineSeq = Line LineSeq.Sequence = sq:Line+ {layout(align-list sq)} Line = OptTermEx Line.ISequence = TermExLst OptTermEx {layout(0.first.line == 1.first.line)} TermExLst.Prior = TermEx+ OptTermEx = ex:Ex {layout(offside ex)} OptTermEx = te:TermEx {layout(offside te)} TermEx.Terminate = <;> Ex.Int = INT Ex.Stream = Ex.Sum = [[Ex] + [Ex]] {left} Ex.Gets = [[Ex] << [Ex]] {left} Ex.To = [[Ex] >> [Ex]] {left} Ex = <()> {bracket} context-free priorities Ex.To > Ex.Sum > Ex.Gets, // prevent cycle: no singletons LineSeq.Sequence <0> .> Line+ = Line