... | ... | @@ -12,24 +12,34 @@ |
|
|
` num - целое без знака`
|
|
|
` begin end cycle - ключевые слова`
|
|
|
|
|
|
#### Глобальные переменные, необходимые для работы лексического анализатора:
|
|
|
#### Публичные поля, необходимые для работы лексического анализатора:
|
|
|
|
|
|
` fname: string; // Имя файла программы`
|
|
|
` LexRow,LexCol: integer; // Строка-столбец начала лексемы. Конец лексемы = LexCol+Length(LexText)`
|
|
|
` LexKind: Tok; // Тип лексемы `
|
|
|
` LexText: string; // Текст лексемы`
|
|
|
` LexValue: integer; // Целое значение, связанное с лексемой lexNum`
|
|
|
` public int LexRow, LexCol; // Строка-столбец начала лексемы. Конец лексемы = LexCol+Length(LexText)`
|
|
|
` public Tok LexKind; // Тип лексемы `
|
|
|
` public string LexText; // Текст лексемы`
|
|
|
` public int LexValue; // Целое значение, связанное с лексемой lexNum`
|
|
|
|
|
|
Тип Tok является перечислимым и содержит все возможные лексемы нашего языка, а также специальную лексему EOFF конца текста:
|
|
|
|
|
|
` Tok = (EOF, ID, INUM, COLON, SEMICOLON, ASSIGN, &BEGIN, &END, CYCLE);`
|
|
|
``` public enum Tok
|
|
|
{
|
|
|
EOF,
|
|
|
ID,
|
|
|
INUM,
|
|
|
COLON,
|
|
|
SEMICOLON,
|
|
|
ASSIGN,
|
|
|
BEGIN,
|
|
|
END,
|
|
|
CYCLE
|
|
|
}```
|
|
|
|
|
|
#### Вспомогательные глобальные переменные, описанные в секции реализации модуля:
|
|
|
#### Вспомогательные переменные, необходимые для работы анализатора:
|
|
|
|
|
|
` ch: Char; // Текущий символ`
|
|
|
` f: text; // Текущий файл`
|
|
|
` row,col: integer; // Текущие строка и столбец в файле`
|
|
|
` KeywordsMap := new Dictionary`<string,TLex>`; // Словарь, сопоставляющий ключевым словам константы типа TLex. `
|
|
|
` private char currentCh // Текущий символ`
|
|
|
` private TextReader inputReader; // Текущий поток ввода`
|
|
|
` private int row, col; // Текущие строка и столбец в файле`
|
|
|
` private Dictionary<string, Tok> keywordsMa; // Словарь, сопоставляющий ключевым словам константы типа TLex. `
|
|
|
` // Инициализируется процедурой InitKeywords`
|
|
|
|
|
|
#### Процедура NextCh
|
... | ... | @@ -40,7 +50,7 @@ |
|
|
|
|
|
Процедура InitKeywords инициализирует словарь ключевых слов KeywordsMap. Этот словарь ставит в соответствие строке ключевого слова константу типа TLex:
|
|
|
|
|
|
`KeywordsMap['begin'] := lexBegin;`
|
|
|
`keywordsMap["begin"] = Tok.BEGIN;`
|
|
|
|
|
|
### Модуль лексического анализатора
|
|
|
|
... | ... | |