自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(5)
  • 收藏
  • 关注

原创 编译器设计笔记09 控制流(自存)

它首先检查if关键字后的左括号,然后解析条件表达式,接着检查右括号。它首先检查while关键字后的左括号,然后解析条件表达式,接着检查右括号。之后,它使用一个while循环来不断计算条件表达式的值,只要条件为真,就执行循环体的语句。它首先解析初始化子句,然后时条件表达式,接着时增量子句,最后是循环体。if节点包含三个字段:condition(条件表达式)、thenBranch(条件为真时执行的语句)和elseBranch(条件为假时执行的语句)它首先计算条件表达式的值,如果条件为真,则执行then分支;

2025-06-27 11:55:57 649

原创 编译器设计笔记08 表达式和状态(自存)

解析器通过递归下降的方式解析这些语句,并生成相应的语法树节点。statement()方法:这是解析语句的入口方法。如果当前标记是PRINT,则调用printStatement()方法。assign():赋值给变量,如果当前环境找不到,则递归查找外围环境。expressionStatement()方法:解析表达式语句。get():查找变量,如果当前环境找不到,则递归查找外围环境。printStatement()方法:解析print语句。调用executeBlock()方法执行块中的语句。

2025-06-25 10:08:23 524

原创 编译器设计笔记07 表达式求值(自存)

解释器类Interpreter实现了Expr.Visitor<Object>接口,用于遍历抽象语法树(AST),并计算表达式的值。解释器通过interpret方法接收一个表达式的AST,计算其值,并将结果打印出来。每个表达式类型都有对应的访问者方法,这些方法定义了如何计算表达式的值。二元表达式(如+、-、*、/)先计算左右操作数的值,然后应用二元操作符。Lox类负责驱动解释器,处理输入的代码,并调用解释器来执行表达式。和 -)先计算其操作数的值,然后应用一元操作符。分组表达式递归地计算其内部表达式的值。

2025-06-24 13:25:22 1060

原创 编译器设计笔记06 解析表达式(自存用)

这些代码实现了一个递归下降的解析器,能够解析Lox语言的表达式,并生成相应的抽象语法树。解析器通过递归调用处理不同的语法规则,并通过辅助方法来处理标记的匹配、消费和错误报告。解析器类Parser的主要职责是将输入的标记序列解析成抽象语法树(AST),它通过递归下降的方式,将每个语法规则转换为一个方法。在主程序Lox中,解析器被用来解析输入的表达式,并使用AstPrinter类来打印生成的AST。parse()方法是解析器的入口,它调用expression()方法来解析输入的表达式。

2025-06-24 10:58:13 717

原创 编译器设计笔记05 表示代码(自存用)

通过语法规则生成语法中的字符串,以这种方式创建的字符串被称为推导式,因为每个字符串都是从语法规则中推导出来的。在这个过程的每一步中,我们都要选择一条规则,然后按照它告诉你的去做。规则被称为生成式,因为它们生成了语法中的字符串。在我们定义的语法中,终止符是独立的词素,来自扫描器的词法标记,比如"if",“1234”然后它定义了一组字符串,这些字符串包含在语法中。它的意思是:执行哪条规则,然后将它产生的任何内容插入这里。上下文无关语法中的每个生成式都有一个头部和描述其生成内容的主体。5.1 上下文无关语法。

2025-06-16 14:55:51 508

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除