Basic String escape
Some checks failed
Build / build (push) Successful in 1m37s
Test / build (push) Failing after 11m57s

This commit is contained in:
Chuck Smith
2024-03-19 16:41:44 -04:00
parent 97eeae0c1a
commit aa0582ed72
3 changed files with 21 additions and 11 deletions

View File

@@ -1,6 +1,9 @@
package lexer
import "monkey/token"
import (
"monkey/token"
"strings"
)
type Lexer struct {
input string
@@ -179,14 +182,20 @@ func (l *Lexer) skipWhitespace() {
}
func (l *Lexer) readString() string {
position := l.position + 1
b := &strings.Builder{}
for {
l.readChar()
if l.ch == '"' || l.ch == 0 {
break
if l.ch == '\\' && l.peekChar() == '"' {
l.readChar()
} else {
if l.ch == '"' || l.ch == 0 {
break
}
}
b.WriteByte(l.ch)
}
return l.input[position:l.position]
return b.String()
}
func (l *Lexer) readLine() string {

View File

@@ -32,6 +32,7 @@ func TestNextToken(t *testing.T) {
"foo bar"
[1, 2];
{"foo": "bar"}
"foo \"bar\""
`
tests := []struct {
@@ -137,7 +138,7 @@ func TestNextToken(t *testing.T) {
{token.COLON, ":"},
{token.STRING, "bar"},
{token.RBRACE, "}"},
{token.STRING, "foo \"bar\""},
{token.EOF, ""},
}