Форум программистов
 
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

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

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

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

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

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

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

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

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

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

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

skype: vapaa_mies
По умолчанию

Цитата:
Сообщение от 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 вне форума   Ответить с цитированием
Ответ

Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

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


18:29.


Powered by vBulletin® Version 3.8.8 Beta 2
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.

RusProfile.ru


Справочник российских юридических лиц и организаций.
Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru