Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 24.07.2017, 10:45   #1
armchair
Пользователь
 
Регистрация: 05.12.2015
Сообщений: 36
По умолчанию Delphi. Лексический анализатор

Входной язык содержит операторы условия типа if..then..else и if..then, разделённые символом ; (точка с запятой). Операторы условия содержат идентификаторы, знаки сравнения <,>,=, шестнадцатеричные числа, знак присваивания (:=).

Лексический анализатор у меня работает не совсем правильно:

Вот код программного модуля LexType:

Код:
unit LexType; {!!! Зависит от входного языка !!!}

interface
{ Модуль, содержащий описание всех типов лексем }

type
{ Возможные типы лексем в программе }
TLexType = (
  LEX_SEMI, LEX_IF, LEX_THEN, LEX_ELSE, LEX_VAR, LEX_CONST,
  LEX_ASSIGN,LEX_GT,LEX_LT, LEX_DO,
  LEX_OPEN, LEX_CLOSE, LEX_START);

{ Функция получения строки наименования типа лексемы }
function LexTypeName(lexT: TLexType): string;
{ Функция получения текстовой информации о типе лексемы }
function LexTypeInfo(lexT: TLexType): string;

implementation

function LexTypeName(lexT: TLexType): string;
{ Функция получения строки наименования типа лексемы }
begin
  case lexT of
    LEX_OPEN:   Result := 'Открывающая скобка';
    LEX_CLOSE:  Result := 'Закрывающая скобка';
    LEX_ASSIGN: Result := 'Знак присвоения';
    LEX_GT:     Result := 'Знак больше';
    LEX_LT:     Result := 'Знак меньше';
    LEX_VAR:    Result := 'Идентификатор';
    LEX_CONST:  Result := 'Константа';
    LEX_SEMI:   Result := 'Разделитель';
      else        Result := 'Ключевое слово';
  end;
end;

function LexTypeInfo(lexT: TLexType): string;
{ Функция получения текстовой информации о типе лексемы }
begin
  case lexT of
    LEX_IF:     Result := 'if';
    LEX_THEN:   Result := 'then';
    LEX_ELSE:   Result := 'else';
    LEX_OPEN:   Result := '(';
    LEX_CLOSE:  Result := ')';
    LEX_ASSIGN: Result := ':=';
    LEX_GT:     Result := '>';
    LEX_LT:     Result := '<';
    LEX_SEMI:   Result := ';';
    LEX_VAR:    Result := 'a';
    LEX_START:  Result := '';
    else        Result := ' ';
  end;
end;

end.
_____
Код программы нужно выделять (форматировать) тегами [CODE] (читать FAQ)
Модератор
______________________




Что в этом коде нужно исправить, потому что для
if (i = 0) then c := 10;
else if (i <= 9) then c := 50
у меня неправильный порядок лексем, после i идёт скобка, а мне нужен знак = (указал скрин, как это выглядит в реализации).

Буду очень благодарен за помощь((
Изображения
Тип файла: png Безымянный.png (6.4 Кб, 128 просмотров)

Последний раз редактировалось Serge_Bliznykov; 24.07.2017 в 10:58.
armchair вне форума Ответить с цитированием
Старый 24.07.2017, 13:40   #2
Black Fregat
Программист
Участник клуба
 
Аватар для Black Fregat
 
Регистрация: 23.06.2009
Сообщений: 1,772
По умолчанию

А у Вас вообще лексемы 'Знак равенства' нет..
Есть знак больше, знак меньше, а знака равенства нет.
Black Fregat вне форума Ответить с цитированием
Старый 25.07.2017, 16:38   #3
armchair
Пользователь
 
Регистрация: 05.12.2015
Сообщений: 36
По умолчанию

Ой, а как записывается лексема для знака равенства? Не подскажете??
armchair вне форума Ответить с цитированием
Старый 25.07.2017, 16:49   #4
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

А как вы остальные записали?
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 25.07.2017, 16:50   #5
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Интесно что дальше будет )) Обзови LEX_EQU
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 25.07.2017, 16:53   #6
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

А U зачем?)
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 25.07.2017, 17:02   #7
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Не знаю, наверно директива asm-а вспомнилась ))
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 25.07.2017, 17:20   #8
armchair
Пользователь
 
Регистрация: 05.12.2015
Сообщений: 36
По умолчанию

Цитата:
Сообщение от Alex11223 Посмотреть сообщение
А как вы остальные записали?
А у меня вообще на выводе знаки сравнения не читает: ни больше, ни меньше, ни равно. На их месте стоят открывающие скобки.
armchair вне форума Ответить с цитированием
Старый 25.07.2017, 17:22   #9
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Ну видимо анализатор неправильно анализирует.
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 25.07.2017, 17:31   #10
armchair
Пользователь
 
Регистрация: 05.12.2015
Сообщений: 36
По умолчанию

Цитата:
Сообщение от Alex11223 Посмотреть сообщение
Ну видимо анализатор неправильно анализирует.
И как это исправить?
armchair вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
лексический анализатор diamondmersik Паскаль, Turbo Pascal, PascalABC.NET 17 15.12.2015 07:36
Borland Delphi 7 лексический анализатор из файла test H3mania Помощь студентам 0 13.04.2013 16:21
Лексический анализатор на Delphi....закажу прогу J-lo Фриланс 2 03.01.2012 19:56
Лексический анализатор serguna005 Паскаль, Turbo Pascal, PascalABC.NET 5 06.12.2008 00:00