我在互联网上找到了威廉·惠特克的this dictionary,我喜欢its parsing capabilities。但输出不适合我。
问题(对我来说是挑战):
给定一个输入形式,如“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代码来更改此程序的输出?
我没有任何Ada知识,但我知道Delphi / Pascal因此很容易理解代码,不是吗?因此导致文本输出的部分似乎是TEXT_IO.PUT(...)
语句,对吧?它们都在 list_package.adb 中调用,所以这可能是要查看的源文件。
特别需要改变什么?
此程序的完整Ada 95源代码可用on this page。
我希望你们中的一些人能够理解Ada 95代码。非常感谢你提前!
我的编译问题:
为了在Windows机器上使用,我下载了 MinGW 并尝试使用“MinGW Shell”编译源文件。但这是我的输入和shell的反应:
使用最新的Cygwin版本进行编译:
当我使用最新版本的Cygwin编译程序时,没有错误消息:
甚至还创建了一个.exe文件。它的大小是1.6 MB(1,682,616字节)。但是当我打开它时,它立即关闭。出了什么问题?
答案 0 :(得分:3)
尽管我喜欢Ada,但我会鼓励你学习以你想要的方式破解它所需的最小数量......
真的,你要求一个简单的数据过滤器,通过将输出汇总到awk很容易实现。如果你在任何Linux上运行,你已经有awk(并且真的应该学会使用它)。如果你在Windows上,你可以从MinGW获得awk和各种有用的好东西,这是你需要去获取Ada编译器的地方之一。
如果您确实需要Windows Ada编译器,我建议从那里获取GNAT / GCC。可以从AdaCore(维护者)获得另外两种可用的GNAT / GPL和GNAT / PRO。但是,必须购买GNAT / PRO,GNAT / GPL呈现使用GPL编译的任何程序的分发。你可能不介意GPL适用于你的程序我想,但我猜这不是一个足够严重的需要为商业支持。
如果您使用的是Linux,那么GNAT Ada编译器应该可以选择GCC(如果没有默认安装)。如果你愿意,当然也有AdaCore提供的其他两个选项。
嗯,你问过learning Ada。实际上,如果您熟悉其他编译过程语言(例如:C / C ++,Java,Pascal,Modula-2等),那么选择它应该不会有太多麻烦。 This question covers Ada books。对于我自己,我通常只使用the official LRM作为参考。与大多数语言不同,Ada有一个国际标准化的语言参考手册,可以在线免费获取。它也很可读,就像这样的事情。
答案 1 :(得分:3)
William Whitaker's Words是一个方便的工具。您可以找到已为您的平台构建的version。我没有更改代码,但您可以使用各种parameters更改某些内容。它甚至托管了online。如果你得到一个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)
附录:一种方法是在Ubuntu 10.04上使用gcc 4.4.3,并使用上面更新的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;
附录:一旦你运行它,修改它的问题仍然存在。 grep
Put_Line\(
显示629次点击;大部分时间都在line_stuff
和list*
。那是我开始的地方。在学习Ada时,有几个很好的教程here。
答案 2 :(得分:1)
关于编译:您可以使用GNAT。它支持Ada83,Ada95和Ada05。要告诉它使用Ada95,请使用-gnat95开关。
上获取