fostr/trans/python.str
Glen Whitney 804a00902a 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

33 lines
824 B
Plaintext

module python
imports libstrategolib signatures/- util
rules
py: TopLevel(x) -> $[import sys
class StdioC:
def gets(self, v):
print(v, file=sys.stdout, end='')
return self
def to(data,strm):
strm.gets(data)
return data
Stdio = StdioC()
[x]]
py: Stream() -> $[Stdio]
py: Int(x) -> x
py: LitString(x) -> $[r[x]]
py: Sum(x,y) -> $[[x] + [y]]
py: Gets(x, y) -> $[[x].gets([y])]
py: To(x, y) -> $[to([x],[y])]
py: Terminate(x) -> $[[x];]
py: Sequence(l) -> <join(|"\n")>l
strategies
python = bottomup(try(py))
// Interface python code generation with editor services and file system
to-python: (selected, _, _, path, project-path) -> (filename, result)
with filename := <guarantee-extension(|"py")> path
; result := <python> selected