-
Notifications
You must be signed in to change notification settings - Fork 27
/
4_repl.go
48 lines (44 loc) · 1.74 KB
/
4_repl.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
/*
این فایل مربوط به ساخت
Read Evaluate Print Loop
یا به اختصار
REPL
هست
احتمالا توی زبان های مختلف نمونه مشابهش رو دیدید. مثل کنسول جاوا اسکریپت ، پایتون یا لوآ
میتونید برنامه رو در حالت
REPL
اجرا کنید و همونجا دستورات را تایپ کنید و نتیجه را ببینید
احتمالا با بعضی از زبانها کارکردید که بعد از اجرای فایل اصلی اون زبان با خط فرمان زیر روبرو میشید
>
این همونه :)
*/
package main
import (
"bufio"
"fmt"
"os"
)
/*
شما ساخت یک زبان از اول تا آخر را دیدید
پس تفسیر این چند خط باید براتون مثل پیش دبستانی باشه
ابتدا توسط پکیج
bufio
یک اسکنر میسازیم و ورودی رو از خط فرمان دریافت میکنیم
به ازای هر وردی یک لکسر یک پارسر و یک اولیوتور (فارسیش خیلی سخت بود انصافا) میسازیم و ورودی رو پاس میدیم
و در خط بعد خروجی دستورات اجرایی رو در خروجی چاپ میکنیم
و در خروجی نتیجه رو میبینیم که معجزه چجوری اتفاق میفته
چجوری همه اون متن های ظاهرا بی معنی رو تبدیل به یک چیز با معنی کردیم
*/
func NewREPL() {
scanner := bufio.NewScanner(os.Stdin)
scope := NewScope(nil)
fmt.Println("Kahroba Version 0.1")
for {
fmt.Print("> ")
scanner.Scan()
line := scanner.Text()
lexer := NewLexer(line)
parser := NewParser(lexer.tokens)
fmt.Println(Eval(parser.nodes, scope))
}
}