module fostr imports Common context-free start-symbols Ex context-free sorts Ex context-free syntax Ex.Int = INT Ex.Stdio = Ex.Sum = {Ex "+"}+ Ex.Receives = [[Ex] << [Ex]] {left} Ex.Enters = [[Ex] >> [Ex]] {left} Ex = <()> {bracket} context-free priorities Ex.Enters > Ex.Sum > Ex.Receives, // prevent cycle: no singletons Ex.Sum <0> .> {Ex "+"}+ = Ex, // flat: no Sum immediately in Sum: {Ex "+"}+ = Ex <0> .> Ex.Sum, {Ex "+"}+ = {Ex "+"}+ "+" Ex <2> .> Ex.Sum