← Все проекты

SIMPLE PROJECTS

Компилятор

Учебный проект — компилятор для языка I.

C++BisonLLVM
Превью проекта Компилятор

О проекте

Учебный компилятор для языка I, разработанный в рамках курса Compilers Construction. Проект охватывает разбор исходного кода, построение абстрактного синтаксического дерева и генерацию представления для LLVM.

Возможности языка

  • Императивный структурированный язык с явным вызовом подпрограммы для начала выполнения.
  • Объявления переменных, пользовательских типов и подпрограмм.
  • Области видимости: сущность доступна от места объявления до конца блока.
  • Примитивные типы integer, real, boolean и string, а также массивы, записи и пользовательские типы.
  • Условия, циклы, операции, вызовы подпрограмм, ввод-вывод и управление выполнением.

AST

Абстрактное синтаксическое дерево построено вокруг базового узла ASTNode:

ASTNode
├── Expression
│   ├── IntegerLiteral, RealLiteral, BooleanLiteral, StringLiteral
│   ├── Identifier
│   ├── BinaryOp, UnaryOp
│   ├── ArrayAccess, FieldAccess
│   └── RoutineCallExpr
├── Statement
│   ├── VarDecl, TypeDecl, RoutineDecl
│   ├── Assignment, IfStatement, WhileLoop, ForLoop
│   ├── PrintStatement, ReadStatement
│   └── ReturnStatement, BreakStatement, ContinueStatement
└── Type
    ├── PrimitiveType (integer, real, boolean, string)
    ├── ArrayType, RecordType
    └── UserDefinedType

Пример программы

type Point is record
    var x : integer
    var y : integer
end

routine AddPoints(a : Point; b : Point) : Point is
    var result : Point
    result.x := a.x + b.x
    result.y := a.y + b.y
    return result
end

var p : Point
p.x := 3
p.y := 4
p := AddPoints(p, p)
print p.x
print p.y