我在互联网上找到了 William Whitaker 的 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 字节)。但是当我打开它时,它立即关闭。出了什么问题?

最佳答案

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
版权所有 (C) 2009 Free Software Foundation, Inc.
这是免费软件;请参阅复制条件的来源。没有
保修单;甚至不是为了特定目的的适销性或适合性。

这是使用 Catulli Carmina 中我第二喜欢的段落的标题进行的快速测试。

$ ./words odi et amo
odi V 6 1 PRES ACTIVE IMP 2 S
odeo, odire, odivi(ii), - V TRANS [EXXCW] 后来
od.i V 4 1 PRES ACTIVE IMP 2 S
odio, odire, odivi, - V (4th) TRANS [FXXCF] 中世纪
恨;不喜欢;不愿意/不愿意/不喜欢; (通常。PREFDEF);
odi N 2 4 GEN S N 早期
odium, odi(i) N (2nd) N [XXXAO]
仇恨/仇恨/不喜欢/反感; odium,不受欢迎;无聊/不耐烦;
仇恨(由/对团体表现),敌意;仇恨/仇恨的对象;
od.i V 3 1 PERF ACTIVE IND 1 S
odi, odisse, osus V (3rd) PERFDEF [XXXBX]
讨厌(PERF 形式,PRES 力),不喜欢;不愿意/不愿意/不喜欢;

等CONJ
等 CONJ [XXXAX]
并且,甚至;也,甚至; (et ... et = both ... and);

am.o V 1 1 PRES ACTIVE IND 1 S
amo, amare, amavi, amatus V (1st) [XXXAO]
爱,喜欢;陷入爱情;喜欢;有一种倾向;

附录:一旦你让它运行,修改它的问题仍然存在。 grepPut_Line\( 显示 629 个命中;大多数都在 line_stufflist* 中。那就是我要开始的地方。在您学习 Ada 时,有几个很好的教程 here

关于dictionary - 艾达 95 : Modifying output of dictionary program,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5724330/

10-12 20:55