chore: Switch to this repository from predecessor
All checks were successful
continuous-integration/drone/push Build is passing
All checks were successful
continuous-integration/drone/push Build is passing
This commit is contained in:
parent
9ecfa63f58
commit
7b00b01856
23 changed files with 733 additions and 32 deletions
74
tests/basic.spt
Normal file
74
tests/basic.spt
Normal file
|
@ -0,0 +1,74 @@
|
|||
module basic
|
||||
language fostr
|
||||
|
||||
/** md
|
||||
Title: A whirlwind tour of fostr
|
||||
|
||||
## Whirlwind tour
|
||||
|
||||
fostr is just in its infancy, so it's not yet even ready for
|
||||
Hello, World. The best we can offer now is this little snippet
|
||||
that writes the sum of the ASCII codes for 'H', 'W', and '!' to standard output:
|
||||
```fostr
|
||||
**/
|
||||
|
||||
/** md */ test emit_sum [[
|
||||
stdio << 72 + 87 + 33
|
||||
]]/* **/ parse to Receives(Stdio(), Sum([Int("72"), Int("87"), Int("33")]))
|
||||
/** writes
|
||||
192**/
|
||||
|
||||
/** md
|
||||
```
|
||||
|
||||
At the moment, there are only two ways to run a file containing fostr code
|
||||
(you can find the above in `tests/emit_sum.fos`). They both start by
|
||||
cloning this fostr project. Then, either:
|
||||
|
||||
1. Open the project in Eclipse and build it, visit your program file,
|
||||
generate code from it in your preferred target language (among
|
||||
the options available in the "Spoofax > Generate" menu), and execute the
|
||||
resulting code.
|
||||
|
||||
1. Use the `bin/fosgen` bash script to generate code in a target language,
|
||||
and execute the resulting code.
|
||||
|
||||
For example, this snippet generates the following Python:
|
||||
```python
|
||||
{! ../examples/emit_sum.py extract:
|
||||
start: 'Stdio\s='
|
||||
!}
|
||||
```
|
||||
(which writes "192" to standard output), or this non-idiomatic, inefficient, but
|
||||
working Javascript:
|
||||
```javascript
|
||||
{! ../examples/emit_sum.js extract:
|
||||
start: '^}'
|
||||
!}
|
||||
```
|
||||
In either case, there's also a preamble defining Stdio that's generated.
|
||||
(Haskell code generation is also currently supported.)
|
||||
|
||||
### Everything has a value
|
||||
|
||||
As mentioned in the [Introduction](../README.md), everything in a fostr
|
||||
program (including the entire program itself) is an expression and has
|
||||
a value. So what's the value of that expression above? Well, `stdio` is our
|
||||
first example of a stream, and for convenience, the value of a stream
|
||||
receiving an item is just the stream back again. The `<<` operator is also
|
||||
left-associative, so that way we can chain insertions into a stream:
|
||||
```fostr
|
||||
**/
|
||||
|
||||
/** md */ test emit_twice [[
|
||||
stdio << 72 + 87 + 33 << 291
|
||||
]]/* **/ parse to Receives(
|
||||
Receives(Stdio(), Sum([Int("72"), Int("87"), Int("33")])),
|
||||
Int("291"))
|
||||
/** writes
|
||||
192291**/
|
||||
|
||||
/** md
|
||||
```
|
||||
Running this program produces a nice palindromic output: "192291".
|
||||
**/
|
1
tests/emit_sum.fos
Normal file
1
tests/emit_sum.fos
Normal file
|
@ -0,0 +1 @@
|
|||
stdio << 72 + 87 + 33
|
Loading…
Add table
Add a link
Reference in a new issue