Автор оригинала: Quang Dang Van.
Эта часть использует определенный язык в части А для написания лексера.
Нам нужно выполнить следующие шаги, чтобы извлечь токен по токену в части А:
- определение типов символов:
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
- откройте входной файл, прочитайте символ за символом и верните токен (тип токена с лексемой)
Нам нужны 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”