Ада 95: изменение вывода словарной программы - PullRequest
4 голосов
/ 20 апреля 2011

Я нашел этот словарь Уильяма Уитакера в Интернете, и мне нравится его возможности разбора .Но вывод не подходит для меня.

Проблема (вызов для меня):

С учетом формы ввода, такой как «audiam»,Программа возвращает следующий вывод (простой текст):

audi.am              V      4 1 PRES ACTIVE  SUB 1 S    
audi.am              V      4 1 FUT  ACTIVE  IND 1 S    
audio, audire, audivi, auditus  V (4th)   [XXXAO]  
hear, listen, accept, agree with; obey; harken, pay attention; be able to hear;

Но я просто хочу получить следующий вывод текста (такой же ввод: audiam):

audiam=audio, audire, audivi, auditus

То есть:

InputWord=Dictionary_Forms

Так что некоторые фрагменты информации мне не нужны.

Как я могу изменить вывод этой программы, изменив код Ады?

У меня нет никаких знаний Ada, но я знаю Delphi / Pascal, так что довольно легко понять код, не так ли?То есть части, вызывающие вывод текста, выглядят как операторы TEXT_IO.PUT(...), верно?Все они называются в list_package.adb , так что это, вероятно, исходный файл для просмотра.

Что конкретно нужно изменить?

Полная Ада 95Исходный код этой программы доступен на этой странице .

Я надеюсь, что некоторые из вас смогут понять код Ada 95.Заранее большое спасибо!

Мои проблемы с компиляцией:

Для использования на машине с Windows я скачал MinGW и попытался скомпилироватьисходные файлы с использованием "MinGW Shell".Но это был мой вклад и ответ оболочки:

MinGW Shell reponse

Компиляция с последней версией Cygwin:

Когда я компилирую программу, используяВ последней версии Cygwin отсутствует сообщение об ошибке:

enter image description here

Существует даже файл .exe, который создается.Его размер составляет 1,6 МБ (1 682 616 байт).Но когда я открываю его, он сразу же закрывается.Что пошло не так?

Ответы [ 3 ]

3 голосов
/ 20 апреля 2011

Столько, сколько мне нравится Ада, и я бы посоветовал вам выучить минимальную сумму, необходимую для взлома, так, как вы хотите ...

На самом деле, вы запрашиваете простой фильтр данных, который было бы довольно просто выполнить, отправив вывод в awk . Если вы используете какой-либо вариант Linux, у вас уже есть awk (и вы действительно должны научиться его использовать). Если вы работаете в Windows, вы можете получить awk и другие полезные полезности от MinGW , это одно из тех мест, где вам в любом случае нужно было бы получить компилятор Ada.

Если вам нужен компилятор Windows Ada, я бы предложил получить оттуда GNAT / GCC. Два других доступных варианта, GNAT / GPL и GNAT / PRO доступны от AdaCore (сопровождающие). Однако GNAT / PRO должен быть приобретен, а GNAT / GPL отображает дистрибутивы любой программы, скомпилированной с использованием GPL. Я полагаю, вы можете не обращать внимания на GPL, применяемый к вашей программе, но я полагаю, что это недостаточно серьезная потребность в коммерческой поддержке.

Если вы работаете в Linux, компилятор GNAT Ada должен быть доступен с GCC в качестве опции (если не установлен по умолчанию). Те же два других варианта от AdaCore, конечно, доступны и там, если хотите.


Ну, вы спросили об изучении Ады . В самом деле, если вы знакомы с другими скомпилированными процедурными языками (например, C / C ++, Java, Pascal, Modula-2 и т. Д.), У вас не должно быть особых проблем с его подбором. Этот вопрос касается книг Ады . Для себя я обычно просто использую официальный LRM в качестве ссылки. В отличие от большинства языков, Ada имеет международное стандартизированное справочное руководство по языкам, которое доступно онлайн бесплатно. Это также вполне читабельно, когда такие вещи идут.

3 голосов
/ 20 апреля 2011

Слова Уильяма Уитакера - удобный инструмент.Возможно, вы сможете найти версию , уже созданную для вашей платформы.Я не изменил код, но вы можете изменить некоторые вещи, используя различные параметры .Это даже размещено онлайн .Если вы получили компилятор Ada, я включил последний использованный Makefile.Он немного тонок в абстракции, но включает в себя основные этапы компиляции программы и утилит, а также этапы построения словарей.

TARG = words
ARGS = -O

$(TARG): *.ad[bs]
    gnatmake $(TARG) $(ARGS)

all: $(TARG)
    gnatmake makedict $(ARGS)
    gnatmake makeinfl $(ARGS)
    gnatmake makestem $(ARGS)
    gnatmake makeefil $(ARGS)
    @echo Please make the dicitionary
    @echo ./makedict DICTLINE.GEN
    @echo ./makestem STEMLIST.GEN
    @echo ./makeefil EWDSLIST.GEN
    @echo ./makeinfl INFLECTS.GEN

debug:
    gnatmake -g $(TARG)

clean:
    rm -f *.o *.ali b~* core

cleaner: clean
    rm -f *.s makedict makeinfl makestem makeefil

cleanest: cleaner
    rm -f $(TARG)

Приложение: Один из подходов заключается в использовании gcc 4.4.3 вUbuntu 10.04 с обновленным Makefile выше.Для удобства я использовал VirtualBox для размещения экземпляра linux.

$ gcc --version
gcc (Ubuntu 4.4.3-4ubuntu5) 4.4.3
Copyright (C) 2009 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

Вот быстрый тест с использованием названия моего второго любимого отрывка из Catulli Carmina .

$ ./words odi et amo
odi                  V      6 1 PRES ACTIVE  IMP 2 S    
odeo, odire, odivi(ii), -  V TRANS   [EXXCW]    Later
od.i                 V      4 1 PRES ACTIVE  IMP 2 S    
odio, odire, odivi, -  V (4th) TRANS   [FXXCF]    Medieval
hate; dislike; be disinclined/reluctant/adverse to; (usu. PREFDEF);
odi                  N      2 4 GEN S N                   Early   
odium, odi(i)  N (2nd) N   [XXXAO]  
hate/hatred/dislike/antipathy; odium, unpopularity; boredom/impatience;
hatred (manifested by/towards group), hostility; object of hate/odium;
od.i                 V      3 1 PERF ACTIVE  IND 1 S    
odi, odisse, osus  V (3rd) PERFDEF   [XXXBX]  
hate (PERF form, PRES force), dislike; be disinclined/reluctant/adverse to;

et                   CONJ                               
et  CONJ   [XXXAX]  
and, and even; also, even;  (et ... et = both ... and);

am.o                 V      1 1 PRES ACTIVE  IND 1 S    
amo, amare, amavi, amatus  V (1st)   [XXXAO]  
love, like; fall in love with; be fond of; have a tendency to;

Приложение: После того, как он запущен, проблема его изменения остается.A grep для Put_Line\( показывает 629 хитов;большинство находятся в line_stuff и list*.Вот где я бы начал.Когда вы изучаете Аду, есть несколько хороших учебников здесь .

1 голос
/ 20 апреля 2011

О компиляции: вы можете использовать GNAT. Он поддерживает Ada83, Ada95 и Ada05. Чтобы указать ему использовать Ada95, используйте ключ -gnat95.

Вы можете получить его на http://libre.adacore.com/

...