Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
how-to-realize-a-velocity-template-interpreters
Search
Sponsored
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
eward
December 28, 2012
Programming
0
160
how-to-realize-a-velocity-template-interpreters
how to realize a velocity template language interpreters, use Jison.
eward
December 28, 2012
Tweet
Share
Other Decks in Programming
See All in Programming
Honoを使ったリモートMCPサーバでAIツールとの連携を加速させる!
tosuri13
1
180
Grafana:建立系統全知視角的捷徑
blueswen
0
330
20260127_試行錯誤の結晶を1冊に。著者が解説 先輩データサイエンティストからの指南書 / author's_commentary_ds_instructions_guide
nash_efp
1
980
組織で育むオブザーバビリティ
ryota_hnk
0
180
プロダクトオーナーから見たSOC2 _SOC2ゆるミートアップ#2
kekekenta
0
220
CSC307 Lecture 09
javiergs
PRO
1
840
Lambda のコードストレージ容量に気をつけましょう
tattwan718
0
140
なるべく楽してバックエンドに型をつけたい!(楽とは言ってない)
hibiki_cube
0
140
AIによる高速開発をどう制御するか? ガードレール設置で開発速度と品質を両立させたチームの事例
tonkotsuboy_com
7
2.4k
ノイジーネイバー問題を解決する 公平なキューイング
occhi
0
110
カスタマーサクセス業務を変革したヘルススコアの実現と学び
_hummer0724
0
720
Oxlint JS plugins
kazupon
1
980
Featured
See All Featured
RailsConf 2023
tenderlove
30
1.3k
A Modern Web Designer's Workflow
chriscoyier
698
190k
Test your architecture with Archunit
thirion
1
2.2k
Taking LLMs out of the black box: A practical guide to human-in-the-loop distillation
inesmontani
PRO
3
2k
More Than Pixels: Becoming A User Experience Designer
marktimemedia
3
320
Designing Dashboards & Data Visualisations in Web Apps
destraynor
231
54k
The #1 spot is gone: here's how to win anyway
tamaranovitovic
2
940
End of SEO as We Know It (SMX Advanced Version)
ipullrank
3
3.9k
Cheating the UX When There Is Nothing More to Optimize - PixelPioneers
stephaniewalter
287
14k
Deep Space Network (abreviated)
tonyrice
0
49
Making the Leap to Tech Lead
cromwellryan
135
9.7k
Building Adaptive Systems
keathley
44
2.9k
Transcript
Velocity.js 如何实现⼀一个编译器 1 12年12月28⽇日星期五
来源:Plum • demo服务器和静态⽂文 件服务器 • less statics proxy php tms
• velocity 2 12年12月28⽇日星期五
要有⼀一个velocity解释器 3 12年12月28⽇日星期五
解决⽅方案1 $ java -jar velcoity.jar foo.vm foo.json 4 12年12月28⽇日星期五
5 12年12月28⽇日星期五
⽅方案2 6 12年12月28⽇日星期五
⽅方案2 6 12年12月28⽇日星期五
⽅方案2 • jsVelocity 6 12年12月28⽇日星期五
⽅方案2 • jsVelocity • EJS 6 12年12月28⽇日星期五
⽅方案2 • jsVelocity • EJS • handlerbars 6 12年12月28⽇日星期五
⽅方案2 • jsVelocity • EJS • handlerbars • doT.js 6
12年12月28⽇日星期五
⽅方案2 • jsVelocity • EJS • handlerbars • doT.js •
Juice 6 12年12月28⽇日星期五
⽅方案2 • jsVelocity • EJS • handlerbars • doT.js •
Juice • Logic-less templates 6 12年12月28⽇日星期五
jsVelocity • 第⼀一步:识别变量 7 12年12月28⽇日星期五
可以处理的情况 8 12年12月28⽇日星期五
实际情况是 9 12年12月28⽇日星期五
上⾯面只是简单模式 10 12年12月28⽇日星期五
复杂的情况 • 变量是由三种基本模式 组合⽽而来,正则⽆无法匹 配 11 12年12月28⽇日星期五
复杂的情况 • 变量是由三种基本模式 组合⽽而来,正则⽆无法匹 配 11 12年12月28⽇日星期五
复杂的情况 • 变量是由三种基本模式 组合⽽而来,正则⽆无法匹 配 11 12年12月28⽇日星期五
复杂的情况 • 变量是由三种基本模式 组合⽽而来,正则⽆无法匹 配 11 12年12月28⽇日星期五
复杂的情况 • 变量是由三种基本模式 组合⽽而来,正则⽆无法匹 配 11 12年12月28⽇日星期五
⽤用ruby和python语法写js 共同之处在于,如何解析复杂规则 http://coffeescript.org/ 12 12年12月28⽇日星期五
在解释什么是jison之前,总节 一下本次分享的第一个重要的 话题。前面讲了很多,其实是 如何实现一个编译器这个问题 最关键的步骤,后面是具体怎 么做,前面的步骤是,找到解 决问题的方法,我觉得,前者 更加重要。 13 12年12月28⽇日星期五
在解释什么是jison之前,总节 一下本次分享的第一个重要的 话题。前面讲了很多,其实是 如何实现一个编译器这个问题 最关键的步骤,后面是具体怎 么做,前面的步骤是,找到解 决问题的方法,我觉得,前者 更加重要。 13 12年12月28⽇日星期五
What can Jison do? 14 12年12月28⽇日星期五
vexflow 15 12年12月28⽇日星期五
handlebarsjs 16 12年12月28⽇日星期五
zaach/reflect.js 17 12年12月28⽇日星期五
Jison是⼀一种通⽤用技术 • css render https://speakerdeck.com/ dmosher/so-you-want-to-be-a-front-end- engineer 18 12年12月28⽇日星期五
Tom and Jerry 19 12年12月28⽇日星期五
Tom 和 Jerry为什么会 发⽣生故事? 20 12年12月28⽇日星期五
猫吃⽼老⿏鼠 21 12年12月28⽇日星期五
⽣生物链规则 22 12年12月28⽇日星期五
⽣生物链规则 • 为什么是猫吃⽼老⿏鼠,⽽而 不是Tom eat Jerry? 22 12年12月28⽇日星期五
⽣生物链规则 • 为什么是猫吃⽼老⿏鼠,⽽而 不是Tom eat Jerry? • 编译器实现的是⼀一套语 法规则的解析 22
12年12月28⽇日星期五
⽣生物链规则 • 为什么是猫吃⽼老⿏鼠,⽽而 不是Tom eat Jerry? • 编译器实现的是⼀一套语 法规则的解析 •
语法规则和⾷食物链规则 类似 22 12年12月28⽇日星期五
⽣生物链规则 • 为什么是猫吃⽼老⿏鼠,⽽而 不是Tom eat Jerry? • 编译器实现的是⼀一套语 法规则的解析 •
语法规则和⾷食物链规则 类似 • 分为Grammer和Lex 22 12年12月28⽇日星期五
语法规则 • reference = $ + id + attributes •
attributes = attribute | attributes + attribute • attribute = method | index | property • method = id + ( + param + ) • index = [ + reference + ] • property = dot + id 23 12年12月28⽇日星期五
递归 • 递归定义 • 问题不断拆分成⼩小问题 • ⽆无法匹配⼀一个vm语法 的复杂规则,但是可以 匹配规则的元素 24
12年12月28⽇日星期五
25 12年12月28⽇日星期五
语法分析过程 http://zaach.github.com/jison/demos/calc/ 26 12年12月28⽇日星期五
语法分析过程 http://zaach.github.com/jison/demos/calc/ 26 12年12月28⽇日星期五
$hello.foo[0] { "type": "references", "id": "hello", "leader": "$", "path": [
{ "type": "property", "id": "foo" }, { "type": "index", "id": { "type": "integer", "value": "0" } } ] } 27 12年12月28⽇日星期五
#if($foo > 10) { "type": "if", "condition": { "type": "math",
"operator": ">", "expression": [ { "type": "references", "id": "foo", "leader": "$" }, { "type": "integer", "value": "10" } ] } } 28 12年12月28⽇日星期五
#foreach($bar in [-2..4]) { "type": "foreach", "to": "bar", "from": {
"type": "array", "isRange": true, "value": [-2, "4"] } } 29 12年12月28⽇日星期五
第⼆二步,解释 30 12年12月28⽇日星期五
• http://git.shepherdwind.com/velocity.js/ runner/tests.html?grep=expression • https://github.com/shepherdwind/velocity.js/ blob/master/src/compile/expression.js#L11 • https://github.com/shepherdwind/velocity.js/ blob/master/src/parse/velocity.yy#L190 expression
31 12年12月28⽇日星期五
Block语法 32 12年12月28⽇日星期五
解决问题(解释器) 理论(编译原理) 问题(vm规则) + 问题解决⼀一般思路 实现编译器之前,需要知道编译原理 33 12年12月28⽇日星期五
3.学习需要的技术 4.解决问题 5.总结 2.寻找相似问题解决⽅方案 1.关注问题 6.编译原理 实际问题解决过程 34 12年12月28⽇日星期五
3.学习需要的技术 4.解决问题 5.总结 2.寻找相似问题解决⽅方案 1.关注问题 6.编译原理 实际问题解决过程 34 12年12月28⽇日星期五
灵感来源:顿悟 35 12年12月28⽇日星期五
Thanks 36 12年12月28⽇日星期五