phptext.net PHPText.Net
PHPText.Net > 文章 > 技术 > WEB开发

PHP100告诉你自创一门编程语言的14步

2017/05/19 17:58
99人阅读
很多人对他们现在每天使用的编程语言感到困惑和不解,他们都有各自的需求,无论你是一名职业的IT人员还是普通的开发爱好者,你可能想要创造一门新的编程语言。下面PHP100告诉你如何创造一门语言。

       本文是PHP100中文网原创翻译,转载请看文末的转载要求,谢谢合作!      


       前两天PHP100带给大家的《PHP100带给程序员的11条建议》和《PHP100告诉你应该如何学习编程》,受到很多人的欢迎,今天还是这个系列,告诉你自创一门编程语言的14步。现在,很多人对他们现在每天使用的编程语言感到困惑和不解,他们都有各自的需求,无论你是一名职业的IT人员还是普通的开发爱好者,你可能想要创造一门新的编程语言。下面就来告诉你如何创造一门编程语言。

 

Step 1 对专业术语十分熟悉

       写编译器的人通常会使用一些你不是那么熟悉的术语,所以你一定要在开发前先了解编译器,确保你知道编译的所有事情。
 

Step 2 确定这门语言的应用领域

       你要知道你的这门语言是用来解决某个特定领域的问题,还是通用目的的语言?
 

Step 3 思考这门语言的语义和概念

       (1)允许直接的指针访问吗?
       (2)这门语言提供哪些数据类型?
       (3)这是一门静态语言还是动态的语言?

       (4)使用什么内存模型?是有自动的垃圾回收机制还是需要手工管理内存?

       (5)如何处理并发性?你准备使用单进程/锁模型,还是复杂一些的,像Linda或actor模型?
       (6)语言中提供一些内嵌的简单函数还是所有的内容都来自于类/函数库?
       (7)这门语言的范式是什么?是函数式的,面向对象的,面向方面的,模板式的,还是一种原型,或就是彻头彻尾全新的?

       (8)这门语言和现存的库或函数的接口是如何的?如果你是在创建某一领域特定的语言,这点就尤其重要。
       (9)最后,这里面的一些问题如果想有很好的答案,需要先做好第二步。



Step 4 思考人们想用这门语言做的事情
       比如说,一些人想利用它指挥机器人,一些人想用它开发移动端的桌面程序或是用它开发Web应用。


Step 5 利用上面的例子测试语法
       注意应该让你的语言属于上下文无关范畴或是它的子类别,这在以后对你和你的语法分析程序都是件好事。


Step 6 写出正式的语法规则




Step 7 确定这是一门解释型语言还是编译型语言
       它意味着如果这是一门解释型语言,你的用户通常会在编辑器里写程序,然后直接在解释器中运行。但是对于编译型语言,你的用户会写代码,编译,然后将可执行程序存到别的地方,单独运行。


Step 8 写好语法分析器或借助工具帮助你
       想好如果用户的程序出现语法错误,你的编译器或解释器将给出什么样的警告?


Step 9 使用语法分析器信息写目标代码


Step 10 写好执行程序或代码生成器


Step 11 写出足够多的测试程序来检测这门语言
       你希望创造出一门正规的语言,它的编译器可以明确的接受定义范围内的所有的内容,而拒绝这之外的一切内容。


Step 12 考虑用户如何调试自己的程序


Step 13 如果你的语言使用标准类库,你要写好它
       特别是,如果你写一个编译器,你需要这么一段代码,让操作系统执行它从而开始运行用户程序。


Step 14 发布这门语言的同时加上它的说明书和一些附属例子
       不要忘记注明你是如何整合这些库和语言的,如何使用运行时间的特性和标准类库。


       关于编程语言,PHP100推荐你看《2014年11月“我最喜爱的编程语言” 》《你应该学习的第一门编程语言 》和《主流编程语言的特点分析》,希望你喜欢哦。





原文:http://www.wikihow.com/Create-a-Programming-Language
译文:http://www.php100.com/html/it/focus/2014/1202/7956.html
(翻译:PHP100_Zeroing)
  

同类推荐

web app iphone4 iphone5 iphone6 响应式布局 适配代码web app iphone4 iphone5 iphone6 响应式布局 适配代码
微信支付 官方SDK报错 Fatal error: Uncaught exception ‘WxPayException‘ with message ‘curl出错,错误码:60‘微信支付 官方SDK报错 Fatal error: Uncaught exception ‘WxPayException‘ with message ‘curl出错,错误码:60‘
PHP 判断是蜘蛛(搜索引擎)来访PHP 判断是蜘蛛(搜索引擎)来访
jQuery获得页面元素(div、table等)页面中的相对位置(position)和绝对位置(offset)jQuery获得页面元素(div、table等)页面中的相对位置(position)和绝对位置(offset)
iPhone iPad HTML5网页不能自动播放AUDIO音频、VIDEO视频 原因iPhone iPad HTML5网页不能自动播放AUDIO音频、VIDEO视频 原因
PHP版 P2P借贷公式算法函数大全 平息/等额本金/等额本息/先息后本/混合型PHP版 P2P借贷公式算法函数大全 平息/等额本金/等额本息/先息后本/混合型
ExtJS 4 之动态修改表单 field 的 allowBlank 属性ExtJS 4 之动态修改表单 field 的 allowBlank 属性
PHP 错误之 Division by zero... (溢出)PHP 错误之 Division by zero... (溢出)
ECSHOP 订单状态、支付状态、配送状态 相关程序文件、变量、常量 整理说明ECSHOP 订单状态、支付状态、配送状态 相关程序文件、变量、常量 整理说明
ECshop语言包lang的加载原理ECshop语言包lang的加载原理