TGViewer
Angular Fanatic Angular Fanatic @ngfanatic · 1.28K subscribers
Post #251 2.62K
Angular Fanatic 💡Что нужно чтобы написать свой компилятор для Angular: 1. лексер, можно брать любой html подобный. 2. парсер, сделать самому чтобы вырабатывал AST, подобно (anguar/compiler - astexplorer.net) 3. render свой, в терминах angular - render3 4. wrap tsc, особенно…
Продожение приключений с ng template parser 👻

Оставалось реализовать ng expression. Выражения достаточно сложные потому что в Angular можно писать очень странные штуки вида:

{{val === true ? 1+1 : valie > 1 ? 1+1 : method()["Oups"][1][2] - method2(33) | myPipe:'lol'}}

Перед тем как реализовать все с нуля я вспомнил что есть такая замечательная штука как SimplePEG. Которая позволяет описать PEG грамматики и сделать на основе него парсер. Этим легким путем (как казалось в начале) я и пошел.
Составлять грамматики в PEG очень просто и интуитивно. Поэтому за вечер получил ng expression.

Так как ng template parser у меня написан на Go, требовалась поддержка SimplePEG тоже на Go. Ну я и написал его SimplePEG/Go
Адаптация его под другие языки не так сложна, даже для строго типизированных языков.
Что такое SimplePEG - можете посмотреть в докладе его создателя Алексея Охрименко

---
⏱ Время benchmark =)

Как оказалось моя реализация expression parse не такая уж и быстрая, слишком сложный получился grammar. Вдобавок моя реализация SimplePEG на Go имеет узкое горло в виде парсинга regex подобных выражений, который в свою очередь опирается на std regex go. И как оказалось Gо в этом плане предпоследний по скорости среди всех языков: regex-benchmark

Поэтому ng-template-parser получился такой же по скорости как и angular/compiler/parseTemplate
---

🔜 Что дальше?
- написать свой парсер псевдо regex (?)
- написать expression parser на LR/GLR грамматиках
- перейти наконец то на swc и rust =)
More from @ngfanatic
  1. Jun 3, 2026🧐 22 достаточно большая цифра. Решил повспоминать что было значимого за все это время. An…
  2. Jun 3, 2026Angular v22 🎉 https://github.com/angular/angular/releases/tag/v22.0.0 https://blog.angula…
  3. Nov 20, 2025Angular v21 🎉 https://blog.angular.dev/announcing-angular-v21-57946c34f14b
  4. May 28, 2025Angular v20 🎉 https://github.com/angular/angular/releases/tag/20.0.0
  5. Mar 13, 2025Cможет ли Typescript 7 ускорить сборку Angular проектов? Недавно был анонс что typescript…
  6. Nov 19, 2024Angular v19 🥳⚡️ https://github.com/angular/angular/releases/tag/19.0.0 https://telegra.ph…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →