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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 15.06.2013, 09:55   #1
dimusiko
 
Регистрация: 15.12.2010
Сообщений: 8
Радость компилятор русского pascal

задали сделать компилятор русского pascal тоесть написать программу которая обращаясь к файлу с другой программой тоже на паскале переводила бы все операторы на русский язык.. тоесть вместо: program, begin, of, integer и других операторов паскаля писался их перевод на русский тоесть: программа, начало и т.д. кто нибудь подскажет с чего начать плясать... не могу понять как можно это сделать. помогите пожалуйста кто действительно шарит.
dimusiko вне форума Ответить с цитированием
Старый 15.06.2013, 11:15   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

читайте основы проектирования компиляторов: лексический и синтаксический анализаторы.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 15.06.2013, 11:39   #3
type_Oleg
Старожил
 
Аватар для type_Oleg
 
Регистрация: 02.03.2008
Сообщений: 2,537
По умолчанию

А есть такой Странник - Паскаль на русском. Вроде бы, даже в открытых кодах.
Можете посмотреть.

Последний раз редактировалось type_Oleg; 15.06.2013 в 11:44.
type_Oleg вне форума Ответить с цитированием
Старый 15.06.2013, 12:26   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,792
По умолчанию

Цитата:
переводила бы все операторы на русский язык
Так это же не компилятор )
Простой перевод слов в файле достигается легко.
Правда на разных языках пишется по разному.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 15.06.2013, 15:33   #5
Poma][a
Новичок
Джуниор
 
Регистрация: 11.10.2011
Сообщений: 3,882
По умолчанию

Цитата:
читайте основы проектирования компиляторов: лексический и синтаксический анализаторы.
ИМХО тут можно обойтись меньшей кровью

Берем читаем программку (для наглядности будем читать не из файла). Прочли строку - записали её в другой файлик, заменяя все "программа" на "program", etc.. После чтения последней строки (когда Pos (s, 'end.') <> 0). Компилируем на "буржуйском" паскале программку. И говорим о результате компиляции.. Вуаля!
Poma][a вне форума Ответить с цитированием
Старый 15.06.2013, 22:49   #6
Vapaamies
Ваш К. О.
Участник клуба
 
Аватар для Vapaamies
 
Регистрация: 26.12.2012
Сообщений: 1,755
По умолчанию

Цитата:
Сообщение от Poma][a Посмотреть сообщение
Прочли строку - записали её в другой файлик, заменяя все "программа" на "program", etc..
Слово 'program' может быть и частью комментария, и частью строковой константы. Если по условиям задания разбор должен быть честным, то без лексического анализатора, пусть и упрощенного, тут не обойтись. Выглядит примерно так:
Код:
function NextToken(S, Limit: PLegacyChar; AllowSlashSlash: Boolean = False): TToken;
var
  T: PLegacyChar;
begin
  while S < Limit do
  begin
    while (S < Limit) and not (S^ in ['A'..'Z', 'a'..'z', '_', '''', '{', '(', '/']) do
      Inc(S);
    case S^ of
      '''':
        begin
          Inc(S);
          while (S < Limit) and not (S^ in ['''', #13, #10]) do // skip 'strings'
            Inc(S);
        end;
      '{':
        while (S < Limit) and (S^ <> '}') do // skip {comments}
          Inc(S);
      '(':
        begin
          Inc(S);
          if S^ = '*' then // skip (*comments*)
          begin
            Inc(S);
            while S < Limit do
            begin
              while (S < Limit) and (S^ <> '*') do
                Inc(S);
              if S[1] <> ')' then
                Inc(S);
            end;
          end;
        end;
      '/':
        begin
          T := S + 1;
          if T^ = '/' then // skip //comments
          begin
            Inc(T);
            if AllowSlashSlash then
            begin
              with Result do
              begin
                Token := S;
                Count := T - S;
                Next := T + 1;
              end;
              Exit;
            end;
            S := T;
            while (S < Limit) and not (S^ in [#13, #10]) do // manual NextLine inline
              Inc(S);
          end
          else
            S := T;
        end;
    else
      T := S;
      while (T < Limit) and (T^ in ['A'..'Z', 'a'..'z', '0'..'9', '_', '.']) do
        Inc(T);
      with Result do
      begin
        Token := S;
        Count := T - S;
        Next := T + 1;
      end;
      Exit;
    end;
  end;
  with Result do
  begin
    Token := nil;
    Next := S + 1;
  end;
end;
Полный исходник гуглить по ключевому слову "Пифия" на сайте board.kolibrios.org.
Vapaamies вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Компилятор трехадресного кода(Pascal) Kepochka Помощь студентам 1 25.06.2012 19:48
Выбираю компилятор [Pascal] White_foxSA Обсуждение статей 5 02.02.2010 17:25
Вместо русского иероглифы Kart Общие вопросы C/C++ 3 20.07.2009 09:25
Дайте ссылку на компилятор для turbo pascal Dimanw92 Паскаль, Turbo Pascal, PascalABC.NET 1 23.09.2008 23:57
Компилятор pascal Simply-Art Софт 3 30.08.2008 12:41