Dictionary Ada 95:修改字典程序的输出

Dictionary Ada 95:修改字典程序的输出,dictionary,ada,Dictionary,Ada,我在网上找到了威廉·惠特克的作品,我很喜欢。但是输出不适合我。 问题(对我的挑战): 给定“audiam”等输入形式,程序返回以下输出(纯文本): 但我只想接收以下文本输出(相同的输入:audiam): 即: InputWord=Dictionary_Forms 所以有些信息对我来说是不必要的 如何通过修改Ada代码来更改此程序的输出? 我没有任何Ada知识,但我知道Delphi/Pascal,所以代码很容易理解,不是吗?所以导致文本输出的部分似乎是text\u IO.PUT(…)语句,对吗?

我在网上找到了威廉·惠特克的作品,我很喜欢。但是输出不适合我。

问题(对我的挑战):

给定“audiam”等输入形式,程序返回以下输出(纯文本):

但我只想接收以下文本输出(相同的输入:audiam):

即:

InputWord=Dictionary_Forms
所以有些信息对我来说是不必要的

如何通过修改Ada代码来更改此程序的输出?

我没有任何Ada知识,但我知道Delphi/Pascal,所以代码很容易理解,不是吗?所以导致文本输出的部分似乎是
text\u IO.PUT(…)
语句,对吗?它们都在list\u package.adb中调用,因此这可能是要查看的源文件

有什么特别需要改变的

该程序的完整ADA95源代码可用

我希望你们中的一些人能够理解ADA95代码。提前非常感谢

我的编译问题:

为了在windows机器上使用,我下载了MinGW,并尝试使用“mingwshell”编译源文件。但这是我的输入和壳牌的回应:

使用最新Cygwin版本编译:

当我使用最新版本的Cygwin编译程序时,没有错误消息:


甚至还创建了一个.exe文件。其大小为1.6MB(1682616字节)。但当我打开它时,它马上就关上了。出了什么问题?

关于编译:您可以使用GNAT。它支持Ada83、Ada95和Ada05。要告诉它使用Ada95,请使用-gnat95开关


你可以在

上获得我喜欢的Ada,并鼓励你学习以你想要的方式破解它所需的最低数量

实际上,您需要的是一个简单的数据过滤器,通过管道将输出传输到该过滤器将非常容易实现。如果您运行的是任何风格的Linux,那么您已经有了awk(并且确实应该学会使用它)。如果你使用的是Windows,你可以从中获得awk和其他各种有用的东西,这也是你需要去的地方之一,以获得Ada编译器

如果您确实想要一个WindowsAda编译器,我建议从那里获得GNAT/GCC。其他两种口味,GNAT/GPL和GNAT/PRO可从(维护人员)处获得。但是,必须购买GNAT/PRO,并且GNAT/GPL呈现使用它GPL编译的任何程序的发行版。我想,您可能不介意将GPL应用到您的程序中,但我猜这还不足以满足商业支持的需求

如果您在Linux上,GNAT Ada编译器应该作为选项与GCC一起提供(如果默认情况下未安装)。当然,如果您愿意,AdaCore的另外两个选项也同样适用


嗯,你问过我。事实上,如果您熟悉其他编译过程语言(例如:C/C++、Java、Pascal、Modula-2等),那么学习它应该不会有太多困难。就我自己而言,我通常只是用作参考。与大多数语言不同,Ada有一本国际标准化的语言参考手册,可在线免费获取。它也是相当可读的,就像这样。

是一个方便的工具。您可能会找到一个已经为您的平台构建的。我没有更改代码,但您可以使用各种方法更改某些内容。它甚至是托管的。如果你有一个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)
附录:一种方法是在Ubuntu10.04上使用GCC4.4.3和上面更新的
Makefile
。为了方便起见,我曾经托管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. $gcc—版本 gcc(Ubuntu 4.4.3-4ubuntu5)4.4.3 版权所有(C)2009免费软件基金会。 这是自由软件;有关复制条件,请参见源。没有 担保甚至不是为了适销性或适合某一特定目的。 下面是一个快速测试,使用的标题是我最喜欢的第二篇文章

美元/字odi和amo odi V 6 1压力激活IMP 2 S odeo,odire,odivi(ii),-V TRANS[EXXCW]之后 外径i V 4 1压力激活IMP 2 S 奥迪奥,奥迪尔,奥迪维,-V(第四)跨[FXXCF]中世纪 憎恨不喜欢不愿意/不愿意/反对;(通常为PREFDEF); odi N 2 4 GEN S N早期 odium,odi(i)N(第二)N[XXXAO] 憎恨/憎恨/厌恶/反感;恶,不受欢迎;厌倦/不耐烦; 仇恨(表现为/对团体)、敌意;仇恨/憎恶的对象; od.i V 3 1性能主动指示1 S odi、odisse、osus V(第三)性能定义[XXXBX] 憎恨(表现形式,压力),厌恶;不愿意/不愿意/反对; et CONJ et CONJ[XXXAX] 甚至,;而且,甚至,;(et…et=两者和); am.o V 1 1压力激活指示1 S 阿莫、阿马尔、阿玛维、阿玛图斯五世(第一)[XXXAO] 爱,喜欢;爱上喜欢倾向于;
附录:一旦你运行了它,修改它的问题仍然存在。
Put\u行的
grep
\(
显示了629个点击量;大多数点击量都在
行内容中
列表*
。这就是我要开始的地方。在您学习Ada时,有几个很好的教程。

我们应该假设输出是文本吗?对文本进行后处理不是一个选项?我同意@NWS,除非您对学习Ada感兴趣(是的,我们这里的许多人都能理解Ada 95)我只需要通过一些shell/Python/Perl/awk/任何脚本过滤输出。感谢这两条注释:)是的,输出是(纯)文本。我添加了这个inf
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 --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. $ ./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;