编译器实现:从解析到代码生成
一、递归下降解析器与语法要求
并非所有语法都适合构建递归下降解析器,适合的语法需满足特定条件,这类语法被称为 LL(1) 语法。实际上,网上大多数语法并不属于此类。
二、抽象语法树(AST)
2.1 AST 概述
解析过程的结果是生成抽象语法树(AST),它是输入程序的紧凑表示,捕获了程序的关键信息。许多编程语言中的分隔符符号(如 C++ 中的分号)在解析时重要,但在内存表示中可忽略。
2.2 AST 相关类定义
以下是 AST 相关类的定义,包含在 AST.h 头文件中:
#ifndef AST_H
#define AST_H
#include "llvm/ADT/SmallVector.h"
#include "llvm/ADT/StringRef.h"
class AST;
class Expr;
class Factor;
class BinaryOp;
class WithDecl;
class ASTVisitor {
public:
virtual void visit(AST &){};
virtual void visit(Expr &){};
virtual void visit(Factor &) = 0;
virtual void visit(BinaryOp &) = 0;
virtual void visit(WithDecl &) = 0;
};
class AST {
public:
超级会员免费看
订阅专栏 解锁全文

被折叠的 条评论
为什么被折叠?



