Рубрики
Без рубрики

Компилятор – от базового до продвинутого – Часть В

Создайте компилятор с нуля.

Автор оригинала: Quang Dang Van.

Эта часть использует определенный язык в части А для написания лексера.

Нам нужно выполнить следующие шаги, чтобы извлечь токен по токену в части А:

  1. определение типов символов:
  public static final int LETTER = 0;  //letter 
  public static final int DIGIT = 1;   //digit
  public static final int UNKNOWN = 2; //unknown, use lookup to find class

  public static final int LEFT_PAREN = 3; //left parenthesis
  public static final int RIGHT_PAREN = 4; //right parenthesis
  public static final int ADD_OP = 5; //add operator
  public static final int SUB_OP = 6; //sub operator
  public static final int ASSIG_OP = 7; //assignment operator

  public static final int EOF = 8; //end of file
  public static final int LESS_OP = 9; //less than comparison operator
  public static final int GREATER_OP = 10; //greater than comparison operator
  public static final int COMMA = 11; //comma character
  public static final int ERROR = -1; //unknown character

  public static final int IDENT = 100; //identity
  1. откройте входной файл, прочитайте символ за символом и верните токен (тип токена с лексемой)

Нам нужны 3 метода, которые вызываются по порядку для извлечения токена (этот токен будет использоваться в синтаксическом анализаторе части B)

  a. read character and recognize the character type
  b. look up to the character (if token is unknown)
  c. lex method (return the completed token)

a) символ чтения Мы можем использовать сканер в Java для чтения одного символа, такого как scanner.read(). Этот метод также возвращает класс символов, таких как БУКВА, ЦИФРА, НЕИЗВЕСТНО

б) метод поиска Этот метод использует регистр swith: если символ ‘(‘, этот символ добавляется к лексеме, а тип токена-LEFT_PAREN, если символ’+’, этот символ добавляется к лексеме, а тип токена-ADD_OP … c) метод lex Это вызывает (а) метод и (б) метод для получения типа токена и лексемы. Это вызывается синтаксическим анализатором.

Резюме: До сих пор мы понимали следующее:

  • язык и синтаксис
  • лексема
  • знак
  • лексер

Следующие части: Часть C – синтаксический анализатор, часть D – генерация кода и автоматические инструменты

Оригинал: “https://www.codementor.io/@sqd792/compiler-from-basic-to-advanced-part-b-1iuuyod2au”