fostr/syntax/fostr.sdf3
Glen Whitney 804a00902a
Some checks failed
continuous-integration/drone/push Build is failing
feat: Type-dependent Haskell code generation
Caveat: type is still not being assigned for the Sequence()
  constructor.

  Also fixes the parsing of literal strings (whitespace just after
  the opening quote was being ignored, and was ambiguous just
  before the opening quote).
2021-02-16 09:46:12 -08:00

57 lines
1.0 KiB
Plaintext

module fostr
imports
Common
context-free start-symbols
Start
lexical sorts
STRING_LITERAL
lexical syntax
STRING_LITERAL = "'"~[\']*"'"
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>;>
Ex.Int = INT
Ex.LitString = STRING_LITERAL
Ex.Stream = <stream>
Ex.Sum = <<Ex> + <Ex>> {left}
Ex.Gets = [[Ex] << [Ex]] {left}
Ex.To = [[Ex] >> [Ex]] {left}
Ex = <(<Ex>)> {bracket}
context-free priorities
Ex.To
> Ex.Sum
> Ex.Gets,
// prevent cycle: no singletons
LineSeq.Sequence <0> .> Line+ = Line