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

时间:2011-04-20 00:33:17

标签: dictionary ada

我在互联网上找到了威廉·惠特克的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的反应:

MinGW Shell reponse

使用最新的Cygwin版本进行编译:

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

enter image description here

甚至还创建了一个.exe文件。它的大小是1.6 MB(1,682,616字节)。但是当我打开它时,它立即关闭。出了什么问题?

3 个答案:

答案 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_stufflist*。那是我开始的地方。在学习Ada时,有几个很好的教程here

答案 2 :(得分:1)

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

您可以在http://libre.adacore.com/

上获取