module stratego/rtg/parse imports libstratego-sglr strategies /** * Parse an RTG from a file. * * @type String -> RTG */ parse-rtg-file = where(tbl := <get-rtg-parse-table>) ; parse-file(strsglr-perror, strsglr-report-parse-error | <get-rtg-parse-table>) ; rtg-parsefix parse-rtg-stream = where(tbl := <get-rtg-parse-table>) ; parse-stream(strsglr-report-parse-error | <get-rtg-parse-table>) ; rtg-parsefix get-rtg-parse-table = MemoRTGParseTable <+ import-term(rtg.tbl) ; open-parse-table ; ?tbl ; rules(MemoRTGParseTable: _ -> tbl) external STRRTG-get-rtg-parsetable(|) strategies /** * @type RTG -> RTG */ rtg-parsefix = topdown(try(rtg-ParseFix)) rtg-ParseFix : Plain(s) -> s rtg-ParseFix : Quoted(parts) -> < map(?Chars(<id>) + ?EscapeSeq(<<implode-string> [<id>]>)) ; concat-strings > parts rtg-ParseFix = TupleTerm(string-to-int)