自制編程語(yǔ)言pdf_制作一門編程語(yǔ)言_1.2 自制編程語(yǔ)言并不是很難
本文關(guān)鍵詞:自制編程語(yǔ)言,由筆耕文化傳播整理發(fā)布。
1.2 自制編程語(yǔ)言并不是很難
一提起自制編程語(yǔ)言,很多人都會(huì)覺(jué)得這是一件非常難的事情。
比如,即便是一個(gè)很常見(jiàn)的賦值語(yǔ)句:
在自制編程語(yǔ)言時(shí)都必須考慮到以下幾個(gè)要點(diǎn)。
1. 需要將 a1、 b1、 b2作為變量名解析出來(lái)。如果按照C 語(yǔ)言的語(yǔ)法規(guī)則,變量名只能由字母或下劃線開(kāi)頭,從變量名第二個(gè)字符開(kāi)始才允許出現(xiàn)字母或數(shù)字。所以首先必須掃描這個(gè)語(yǔ)句,然后將匹配上述語(yǔ)法規(guī)則的部分提取出來(lái)。
2. 0.5 是一個(gè)含有小數(shù)點(diǎn)的常量,在提取這類常量時(shí),能否用"數(shù)字組合+ 小數(shù)點(diǎn)+ 數(shù)字組合"來(lái)概括所有常量的特征呢(還要考慮是否允許00.10 這樣的數(shù)值)。當(dāng)然我們的提取規(guī)則還要能處理2 這樣不含小數(shù)點(diǎn)的數(shù)值。
3. 乘法運(yùn)算符 *比 +擁有更高的運(yùn)算優(yōu)先級(jí),語(yǔ)句必須被解析為 b1 + (b2 * 0.5)。
4. b2 * 0.5 的計(jì)算結(jié)果,必須在與 b1 進(jìn)行加法運(yùn)算前就應(yīng)該取得。也就是說(shuō)對(duì)于復(fù)雜的計(jì)算,需要保存很多類似這樣的臨時(shí)運(yùn)算結(jié)果。
假如你已經(jīng)有了一定的編程經(jīng)驗(yàn),肯定能想到上面這些難點(diǎn),甚至可以說(shuō)你的編程經(jīng)驗(yàn)越豐富,就越能感受到這其中隱藏著極大的難題。
不過(guò),編程語(yǔ)言的語(yǔ)法處理器在FORTRAN 誕生后已經(jīng)經(jīng)過(guò)了多年的研究,上面的這些難點(diǎn)都已經(jīng)可以從前人那里找到解決方法*。
在本書(shū)中,,上面1 ~ 3 的問(wèn)題會(huì)用到名為yacc 及l(fā)ex 的工具。問(wèn)題1 和問(wèn)題2用lex,問(wèn)題3 通過(guò)yacc 解決。yacc 和lex 都是非常老的工具了,現(xiàn)在流行的LL語(yǔ)言大多內(nèi)置了yacc?赡苡腥藭(huì)說(shuō):"既然是以學(xué)習(xí)為目的去制作一門編程語(yǔ)言,如果還使用工具的話就太投機(jī)取巧了吧。"(這話很有道理。)所以在本書(shū)中,也會(huì)稍微介紹一下不使用這些工具的解決方法。
無(wú)論是使用工具,還是基于一些已有的解決方案自己編寫(xiě),如果能掌握一些竅門的話,自制編程語(yǔ)言其實(shí)并不難。
那么你想不想試試自己制作一門編程語(yǔ)言呢?自己創(chuàng)造編程語(yǔ)言這件事情,不管怎么說(shuō)都是很酷的吧。
*當(dāng)然,在早年原始的研發(fā)條件下,人們?yōu)榱碎_(kāi)發(fā)第一個(gè)編程語(yǔ)言編譯器還是花費(fèi)了相當(dāng)大的精力,據(jù)說(shuō)實(shí)現(xiàn)初版的FORTRAN 編譯器所花費(fèi)的工時(shí),累計(jì)達(dá)到了216 人月[1]。
【責(zé)任編輯:book TEL:(010)68476606】
回書(shū)目 上一節(jié) 下一節(jié)
原文:1.2 自制編程語(yǔ)言并不是很難 返回讀書(shū)頻道首頁(yè)
本文關(guān)鍵詞:自制編程語(yǔ)言,由筆耕文化傳播整理發(fā)布。
本文編號(hào):110991
本文鏈接:http://sikaile.net/wenshubaike/mishujinen/110991.html