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
<+ STRRTG-get-rtg-parsetable
; 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)