module basic/RStores imports basic/StrCon imports basic/IntCon imports basic/BoolCon imports basic/Locations imports basic/IdentifierCon exports sorts RElem RStore RType RTuple %% This module defines a syntax for stores of typed relations context-free syntax Integer -> RElem {cons("int")} StrCon -> RElem {cons("str")} BoolCon -> RElem {cons("bool")} Location -> RElem {cons("loc")} "{" elements:{RElem ","}* "}" -> RElem {cons("set")} "{|" elements:{RElem ","}* "|}" -> RElem {cons("bag")} "<" elements:{RElem ","}+ ">" -> RElem {cons("tuple")} context-free syntax "int" -> RType {cons("int")} "bool" -> RType {cons("bool")} "str" -> RType {cons("str")} "loc" -> RType {cons("loc")} "<" column-types:{RType ","}+ ">" -> RType {cons("tuple")} "set" "[" element-type:RType "]" -> RType {cons("set")} "bag" "[" element-type:RType "]" -> RType {cons("bag")} "rel" "[" column-types:{RType ","}+ "]" -> RType {cons("relation")} type-name:IdCon -> RType {cons("user-defined")} "&" parameter-name:IdCon -> RType {cons("parameter")} context-free syntax "<" variable:IdCon "," rtype:RType "," value:RElem ">" -> RTuple {cons("rtuple")} "rstore" "(" "[" rtuples:{RTuple ","}* "]" ")" -> RStore {cons("rstore")} context-free syntax "int" | "bool" | "str" | "loc" -> IdCon {reject} hiddens imports basic/Whitespace context-free start-symbols RStore