Skip to content

Commit

Permalink
Merge pull request #32 from RezaKargar/feat/double-quote-escape-in-st…
Browse files Browse the repository at this point in the history
…rings

Add double quote escaping support in strings
  • Loading branch information
kahroba-lang2 authored Feb 4, 2024
2 parents e3e5cc8 + 4df92d3 commit 5959354
Show file tree
Hide file tree
Showing 2 changed files with 18 additions and 4 deletions.
17 changes: 13 additions & 4 deletions 1_lexer.go
Original file line number Diff line number Diff line change
Expand Up @@ -266,12 +266,21 @@ func (l *lexer) emit(t Type, v string) {
/*
این ساده ترین متد ماست
اگر به یک کوتیشن برخورد کردیم این متد اجرا میشود و ما تا به یک کوتیشن دیگر برسیم به خواندن ادامه میدهیم
سپس کوتیشن ها را اول و آخر رشته حذف میکنیم و یک توکن از نوع استرینگ به چنل اضافه میکنیم
اگر کوتیشنی که با آن مواجه میشویم با استفاده از کاراکتر بک اسلش (\) اِسکِیپ شده بود آن کوتیشن را به عنوان کوتیشن
پایانی رشته در نظر نمی گیریم و خواندن را تاجایی که به اولین کوتیشن اسکیپ نشده برسیم ادامه می دهیم
سپس کوتیشن ها را از اول و آخر رشته و بک اسلکش های اِسکِیپ کننده کوتیشن ها را حذف میکنیم
در نهایت یک توکن از نوع استرینگ به چنل اضافه میکنیم
*/
func (l *lexer) lexString() {
str, _ := l.reader.ReadString('"')
str = strings.TrimRight(str, `"`)
l.emit(STRING, str)
finalStr, _ := l.reader.ReadString('"')
str := finalStr
for strings.HasSuffix(str, "\\\"") {
str, _ = l.reader.ReadString('"')
finalStr += str
}
finalStr = strings.TrimRight(finalStr, `"`)
finalStr = strings.ReplaceAll(finalStr, "\\\"", "\"")
l.emit(STRING, finalStr)
}

/*
Expand Down
5 changes: 5 additions & 0 deletions docs/en_readme.md
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,11 @@ Right side type of an operations automatically changes according to the left sid
"1" + 1 // 11
```

You can escape double quote character within a string:
```rust
"Normal text, \"quoted text\"" // Normal text, "quoted text"
```

## Variables
Kahroba is a dynamically typed language (like Python), the interpreter assigns variables a type at runtime based on the variable's value at the time.

Expand Down

0 comments on commit 5959354

Please sign in to comment.