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