06|怎么支持条件语句和循环语句?
宫文学
你好,我是宫文学。
我们现在的语言已经支持表达式、变量和函数了。可是你发现没有,到现在为止,我们还没有支持流程控制类的语句,比如条件语句和循环语句。如果再加上这两类语句的话,我们的语言就能做很复杂的事情了,甚至你会觉得它已经是一门比较完整的语言了。
那么今天,我们就来加上条件语句和循环语句。在这个过程中,我们会加深对作用域和栈桢的理解,包括跨作用域的变量引用、词法作用域的概念,以及如何在运行时访问其他作用域的变量。这些知识点会帮助你加深对计算机语言的运行机制的理解。
而这些理解和认知,会有助于我们后面把基于 AST 的解释器升级成基于字节码的解释器,也有助于我们理解编译成机器码后的运行时机制。
好了,首先我们先从语法层面支持一下这两种语句。
语法分析:支持一元表达式
按照惯例,我们首先要写下新的语法规则,然后使用 LL 算法来升级语法分析程序。新的语法规则如下:
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
- 深入了解
- 翻译
- 解释
- 总结
本文深入探讨了在编程语言中实现条件语句和循环语句的支持,介绍了相应的语法层面的方法。作者详细讨论了if语句和for循环语句的语法规则,以及一元运算的支持。此外,还涉及了作用域、栈桢和运行时访问其他作用域变量的理解。文章还对不同语言对块作用域的规定进行了比较,并探讨了语义分析程序在处理块作用域时的复杂性。最后,提出了数流分析框架的原理,并强调了在引用消解中的两个语义规则。总的来说,本文内容涉及了语法分析和一元运算的升级,为读者理解编程语言的语法和语义提供了重要的参考。 在技术层面,文章介绍了如何在解释器中实现if语句和for循环语句的执行逻辑,以及对块作用域的理解和处理。此外,还提供了一个计算斐波那契数列的示例程序,展示了函数的递归调用。在支持流程控制类语句的过程中,对块作用域的理解成为重要知识点,不同语言在块作用域上的特性不同,需要采用不同的算法来做引用消解。另外,为了支持For循环,还增加了对一元运算符的支持,这些内容对读者理解编程语言的语法和语义具有重要意义。 总的来说,本文内容涵盖了编程语言的语法分析和一元运算的升级,为读者提供了丰富的技术知识和实用的示例,有助于读者加深对编程语言的理解和应用。
仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《手把手带你写一门编程语言》,新⼈⾸单¥59
《手把手带你写一门编程语言》,新⼈⾸单¥59
立即购买
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
登录 后留言
全部留言(5)
- 最新
- 精选
- 奇想天外第六章里面还不支持数组和对象吧?
作者回复: 还不支持。这两个都放在比较后面。
2021-09-04 - ifelse学习打卡2022-09-12归属地:浙江
- 奇想天外//今年才18 let myAge:number = 18; let array2:number; //转眼10年过去 myAge = myAge + 10; let a:number; let b:number; a = 11; b = 10; myAge = b = a; println("myAge is: "); println(myAge); // 这里报错 return arg.toString(); TypeError: Cannot read property 'toString' of undefined2021-09-05
- 有学识的兔子对于for循环语句,一般包含两层作用域,一个作用域是用于循环表达式,另一个作用域是内嵌的循环体(函数调用或者表达式)。2021-08-29
- 崔伟协似乎需要重新编译ts到js,执行node play fib.ts才能成功2021-08-20
收起评论