Brian Picciano
4870455430
The new gg format is based on a BNF file which can be found in the `gg` directory. The code for decoding `.gg` files has been refactored to mirror that file. The result is more resilient parsing, better errors, and a greater ability to extend the format in the future. The new decoder is notable in that it does not use a lexer. Both lexing and parsing are done in a single step. The format syntax itself has also been modified. Rather than using semi-colons everywhere, commas are used as separators in tuples. Additionally the final comma/semi-colon is no longer required.
30 lines
419 B
Go
30 lines
419 B
Go
package vm
|
|
|
|
import (
|
|
"bytes"
|
|
"testing"
|
|
|
|
"github.com/mediocregopher/ginger/gg"
|
|
"github.com/stretchr/testify/assert"
|
|
)
|
|
|
|
func TestVM(t *testing.T) {
|
|
|
|
src := `{
|
|
incr = { out = add < (1, in); };
|
|
|
|
out = incr < incr < in;
|
|
}`
|
|
|
|
var in int64 = 5
|
|
|
|
val, err := EvaluateSource(
|
|
bytes.NewBufferString(src),
|
|
Value{Value: gg.Number(in)},
|
|
GlobalScope,
|
|
)
|
|
|
|
assert.NoError(t, err)
|
|
assert.Equal(t, in+2, *val.Number)
|
|
}
|