我在互联网上找到了 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]
爱,喜欢;陷入爱情;喜欢;有一种倾向;
附录:一旦你让它运行,修改它的问题仍然存在。
grep
的 Put_Line\(
显示 629 个命中;大多数都在 line_stuff
和 list*
中。那就是我要开始的地方。在您学习 Ada 时,有几个很好的教程 here 。关于dictionary - 艾达 95 : Modifying output of dictionary program,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5724330/