手把手带你写一门编程语言
宫文学
北京原点代码 CEO
7235 人已学习
新⼈⾸单¥59
登录后,你可以任选4讲全文学习
课程目录
已完结/共 49 讲
起步篇:让一门超简单的语言跑起来 (21讲)
结束语 (1讲)
手把手带你写一门编程语言
15
15
1.0x
00:00/00:00
登录|注册

06|怎么支持条件语句和循环语句?

你好,我是宫文学。
我们现在的语言已经支持表达式、变量和函数了。可是你发现没有,到现在为止,我们还没有支持流程控制类的语句,比如条件语句和循环语句。如果再加上这两类语句的话,我们的语言就能做很复杂的事情了,甚至你会觉得它已经是一门比较完整的语言了。
那么今天,我们就来加上条件语句和循环语句。在这个过程中,我们会加深对作用域和栈桢的理解,包括跨作用域的变量引用、词法作用域的概念,以及如何在运行时访问其他作用域的变量。这些知识点会帮助你加深对计算机语言的运行机制的理解。
而这些理解和认知,会有助于我们后面把基于 AST 的解释器升级成基于字节码的解释器,也有助于我们理解编译成机器码后的运行时机制。
好了,首先我们先从语法层面支持一下这两种语句。

语法分析:支持一元表达式

按照惯例,我们首先要写下新的语法规则,然后使用 LL 算法来升级语法分析程序。新的语法规则如下:
ifStatement
: If '(' expression ')' statement (Else statement)?
;
forStatement
:For '(' expression? ';' expression? ';' expression? ')' statement
;
statement:
: block
| functionDecl
| varaibleStatement
| expressionStatement
| returnStatement
| ifStatement
| forStatement
| emptyStatement
;
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结
仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《手把手带你写一门编程语言》
新⼈⾸单¥59
立即购买
登录 后留言

全部留言(5)

  • 最新
  • 精选
  • 奇想天外
    第六章里面还不支持数组和对象吧?

    作者回复: 还不支持。这两个都放在比较后面。

  • ifelse
    学习打卡
    归属地:浙江
  • 奇想天外
    //今年才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 undefined
  • 有学识的兔子
    对于for循环语句,一般包含两层作用域,一个作用域是用于循环表达式,另一个作用域是内嵌的循环体(函数调用或者表达式)。
  • 崔伟协
    似乎需要重新编译ts到js,执行node play fib.ts才能成功
收起评论
显示
设置
留言
5
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部