Книга: Давайте создадим компилятор!
Эксперименты по сканированию
Эксперименты по сканированию
Прежде чем возвратиться к нашему компилятору, было бы полезно немного поэкспериментировать с общими понятиями.
Давайте начнем с двух определений, наиболее часто встречающихся в настоящих языках программирования:
<ident> ::= <letter> [ <letter> | <digit> ]*
<number ::= [<digit>]+
(Не забудьте, что "*" указывает на ноль или более повторений условия в квадратных скобках, а "+" на одно и более.)
Мы уже работали с подобными элементами в третьей главе. Давайте начнем (как обычно) с пустого Cradle. Не удивительно, что нам понадобится новая процедура распознавания:
{–}
{ Recognize an Alphanumeric Character }
function IsAlNum(c: char): boolean;
begin
IsAlNum := IsAlpha(c) or IsDigit(c);
end;
{–}
Используя ее, давайте напишем следующие две подпрограммы, которые очень похожи на те, которые мы использовали раньше:
{–}
{ Get an Identifier }
function GetName: string;
var x: string[8];
begin
x := '';
if not IsAlpha(Look) then Expected('Name');
while IsAlNum(Look) do begin
x := x + UpCase(Look);
GetChar;
end;
GetName := x;
end;
{–}
{ Get a Number }
function GetNum: string;
var x: string[16];
begin
x := '';
if not IsDigit(Look) then Expected('Integer');
while IsDigit(Look) do begin
x := x + Look;
GetChar;
end;
GetNum := x;
end;
{–}
(Заметьте, что эта версия GetNum возвращает строку, а не целое число, как прежде).
Вы можете легко проверить что эти подпрограммы работают, вызвав их из основной программы:
WriteLn(GetName);
Эта программа выведет любое допустимое набранное имя (максимум восемь знаков, потому что мы так сказали GetName). Она отвергнет что-либо другое.
Аналогично проверьте другую подпрограмму.
- Введение
- Лексический анализ
- Конечные автоматы и альтернативы
- Эксперименты по сканированию
- Пробел
- Конечные автоматы
- Новые строки
- Операторы
- Списки, запятые и командные строки
- Становится интересней
- Возвращение символа
- Распределенные сканеры против централизованных
- Объединение сканера и парсера
- Заключение
- Эксперименты с числовыми типами данных
- Глава 4 Эксперименты с диаграммами
- Поддерживайте эксперименты и будьте терпимы к ошибкам
- Эксперименты при разделенных больших полушариях мозга
- Проводите эксперименты и делитесь результатами
- Ставьте минимальные эксперименты
- Эксперименты в Facebook
- 5% на эксперименты
- Бизнес-план или эксперименты?
- Разработайте эксперименты с помощью карточки тестирования
- Используйте эксперименты, чтобы протестировать…
- Полномасштабные эксперименты