forked from glen/fostr
feat WIP: checkpoint initial efforts on stream extraction
Adds ! operator and !! expression, with Python code gen and an item in tour. Still needs: other languages, check generated docs, and addition of standard input to test scheme.
This commit is contained in:
parent
cc89ad1e93
commit
7c69b82484
5 changed files with 49 additions and 1 deletions
|
@ -17,6 +17,7 @@ rules
|
|||
|
||||
defStream: DefGets(x) -> Gets(Stream(), x)
|
||||
defStream: DefTo(x) -> To(x, Stream())
|
||||
defStream: DefEmits() -> Emits(Stream())
|
||||
|
||||
strategies
|
||||
|
||||
|
|
|
@ -8,6 +8,8 @@ rules
|
|||
def gets(self, v):
|
||||
print(v, file=sys.stdout, end='')
|
||||
return self
|
||||
def emit(self):
|
||||
return input()
|
||||
def to(data,strm):
|
||||
strm.gets(data)
|
||||
return data
|
||||
|
@ -21,8 +23,10 @@ rules
|
|||
py: LitString(x) -> $[r[x]]
|
||||
py: EscString(x) -> x
|
||||
py: Sum(x,y) -> $[[x] + [y]]
|
||||
py: Concat(x,y) -> $[[x] + [y]]
|
||||
py: Gets(x, y) -> $[[x].gets([y])]
|
||||
py: To(x, y) -> $[to([x],[y])]
|
||||
py: Emits(x) -> $[[x].emit()]
|
||||
py: Terminate(x) -> $[[x];]
|
||||
py: Sequence(l) -> <join(|"\n")>l
|
||||
|
||||
|
|
|
@ -222,6 +222,13 @@ This pattern lets us specify error messages.
|
|||
type_Ex(e2) == STREAM() | error $[Items may only be sent to Streams.]@e2.
|
||||
/* **/
|
||||
|
||||
ty_Ex(Concat(e1, e2)) = STRING() :-
|
||||
type_Ex(e1) == STRING() | error $[Expression [e1] not String in concat.]@e1,
|
||||
type_Ex(e2) == STRING() | error $[Expression [e2] not String in concat.]@e2.
|
||||
|
||||
ty_Ex(Emits(e)) = STRING() :- // At the moment, only stream is stdio
|
||||
type_Ex(e) == STREAM() | error $[Only Streams may emit items.]@e.
|
||||
|
||||
/** md
|
||||
```
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue