tgoop.com/golang_interview/1314
Last Update:
🧩 Кастомизируемый JavaScript-парсер с минимальным ядром
Идея проста: ядро парсера — максимально маленькое. Все «дорогие» фичи JS включаются опционально. Так вы получаете нужный синтаксис без лишних накладных расходов.
🔧 Что это даёт
- Меньше зависимостей и памяти.
- Быстрее разбор там, где не нужен весь JS (например, без `class/async/regex`).
- Гибкая сборка под конкретный продукт: от валидации шаблонов до мини-рантайма.
🧱 Архитектура
- Feature flags: подключайте только нужные конструкции (например, import
, jsx
, template
, `async`).
- Модульный AST: узлы для отключённых фич не создаются.
- Стримовый лексер: позволяет парсить большие файлы без полного буфера.
- Sandbox-режим: строгие лимиты глубины/времени для безопасной обработки.
▶️ Пример (Go, условный API)
package main
import (
"context"
"time"
"example.com/jsparser"
)
func main() {
ctx, cancel := context.WithTimeout(context.Background(), 200*time.Millisecond)
defer cancel()
p := jsparser.New(jsparser.Options{
Features: jsparser.Enable(
jsparser.Base, // идентификаторы, выражения, блоки
jsparser.ImportESM, // поддержка import/export
jsparser.TemplateLit, // шаблонные строки
// jsparser.Class, // можно не включать
// jsparser.Async, // можно не включать
// jsparser.JSX, // включайте по надобности
),
MaxDepth: 512,
MaxTokens: 2_000_000,
})
ast, err := p.Parse(ctx, []byte(`import x from "./m.js"; const s = `+"`hi ${x}`"+`;`))
if err != nil {
panic(err)
}
_ = ast // используйте AST для анализа/трансформаций
}
https://github.com/xjslang/xjs
BY Golang вопросы собеседований

Share with your friend now:
tgoop.com/golang_interview/1314