问题标签 [forth]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
522 浏览

wxpython - wxPython wx.stc.StyledTextCtrl 不区分大小写突出显示

我正在使用wx.stc.StyledTextCtrlin 和应用程序来突出显示 Forth:

我遇到的问题是它只会识别关键字,如果它是在它给出的情况下,我使用的 Forth 是不区分大小写的问题。除了将单词的每个大小写组合放入关键字之外,有没有办法关闭关键字的大小写敏感?

0 投票
0 回答
418 浏览

x86 - x86 Forth 实现不运行

我正在尝试在 64 位 Linux 机器上运行JonesForth(Git 存储库:git://git.annexia.org/git/jonesforth.git)。编译如教程中所述,在 Makefile 中使用,并且工作正常:

但我不能运行任何东西:

退出代码 137 看起来像 SIGKILL,但除此之外,我不知道发生了什么。我试图查看执行过程中是否有任何问题,但不幸的是,我什至无法在该程序上使用GDB(我首先使用 编译它-g):

怎么了?

0 投票
0 回答
251 浏览

c - 使 GTK+ 适应 SwiftForth

SwiftForth-linux 有一个严格的 CLI 接口,因此尝试编写代码来创建自定义窗口需要GTK+之类的东西,我使用了这个。

我的问题出在回调过程中。编写接受按键的代码需要一个合适的回调来配合适当的 signal_connect 函数。

在将 C 代码翻译成 Forth 时,我仍然有一个涉及 event_key 结构的绊脚石,我需要它来处理所按下键的代码。

我认为(但我可能是错的)GTK+ 系统将创建它并将地址传递给我以插入变量并稍后使用,但这是如何完成的?

在我的几个例子中,没有提到事件 * 或任何类似返回的东西。是否有一个小部件函数将返回 event_key 结构的地址?

我快到了,但我需要一些精通 GTK+ 和 C(希望是 Forth)的人的帮助,任何提示都将不胜感激。

TCG

回应第一条评论:我需要访问 event_key 结构来提取按下的键的键码。这如何呈现给回调函数对我来说是个谜。

我的部分问题是,为了将 C 函数翻译成 Forth,我需要了解 G_CALLBACK() 等函数的内部工作原理。我看到的用于接收按键的代码将 GtkWidgit * 和 GtkEventKey * 作为处理程序的输入参数。例如,

我可以编写一个自定义包装器,在执行处理程序之前将这些参数放在返回堆栈上,但这是 GTK+ 所期望的吗?

另外一个:“指向函数的指针”这个术语可能会以一种令人困惑的方式使用。是=“函数的地址”还是“包含函数地址的变量的地址”?

0 投票
0 回答
250 浏览

expect - 期望脚本中的“回声检查”

我正在编写一个期望脚本来通过 /dev/ttyUSB0 将 Forth 源文件上传到微控制器。

我的目标是将“ok”提示变为绿色,将“Redefine”变为黄色并在出现“未找到”等错误时退出。

我遇到的问题是字符发送得太快。我知道我可以使用这样的延迟:

但这不是最优的。是否有一个选项可以检查一个字符是否被回显,同时允许一些额外的反馈,比如 ok 提示?这是我的脚本的开始:

0 投票
1 回答
885 浏览

callback - GTK+ Forth 回调

我最近看到了四年前 Manfred Mahlow 的一篇文章,这篇文章几乎解决了我遇到的问题。文章“在 Forth 中使用 Glade 创建 GTK+ 应用程序”涉及到信号处理程序,指出不能使用 Forth,而只能使用 C 来创建它们。我认为我的问题仍然是一个小问题,但我很难过,我会非常感谢任何建议。其次,如果有人知道如何在地址中不使用破折号的情况下向马洛先生发送电子邮件,我很想听听。

我正在使用SwiftForth的 Linux 版本编写一个应用程序来创建一个自定义窗口并接收按键并写入该窗口。我的目标是实现 Charles Moore 的colorForth,增强且更加用户友好。我决定使用GTK+,对此知之甚少,但除了回调(信号处理程序)之外,我已经成功了。整个东西只有两页代码,所以我放在这里:

我无法使用通常的 g_signal_connect,因为我在我拥有的任何库中都找不到它。如果它出现,我会使用它,因为代码更简单。但是,上面的代码可以编译,当我键入 STARTUP 时,它就是这样做的。正如我所指定的那样,窗口在那里,信号已设置,但按任意键会使 SwiftForth 因“分段错误”而崩溃。

如您所见,我将处理程序的绝对地址提供给信号连接函数。我还尝试将该地址放入变量中并将其作为指针处理,但这会产生 GTK+ 错误。

在编写处理程序时,我假设它会像任何库调用一样运行。输入参数将在返回堆栈上,由 GTK 在处理程序代码执行时提供,我应该将任何返回值放入 EAX。但这种分析可能是错误的。我可能准备地址错误或处理程序的参数错误,或者完全错误的概念。

我希望,尽管声明处理程序必须在 C 中,但有一些方法可以模拟 C 代码的作用,如果需要,在汇编程序中。

我觉得我距离取得这一突破还有一个障碍,如果有人能提出一些建议或我可能会看到的地方,我将非常感激。

0 投票
1 回答
538 浏览

forth - Forth - 将 ASCII 码转换为字符

我尝试在 Tachyon Forth 中为 Parallax Propeller 微控制器编写一个程序,该微控制器从串行端口读取数据。

SERIN 字以数字形式返回数据:

十进制 ok 57600 SERBAUD ok 31 SERIN 。36 好

“31 SERIN”从引脚 P31 (RX) 读取数据。我输入“$”并返回 36。如何将此数字(ASCII 码)转换为具有单个字符的字符串?在这种情况下,使用单个“$”符号。

0 投票
1 回答
160 浏览

forth - 从循环中捕获异常

我正在尝试编写一个 Forth 单词,它将丢弃堆栈中的所有项目。我正在使用一种非常愚蠢的方法,通过使用“drop”运行无限循环并在“drop”失败时捕获错误,因为堆栈为空。

我的话是这样定义的:

当我运行 droploop 时,我得到了一个我期望的错误,并且在执行之后,堆栈是空的。当我运行 dropcatcher 时,如果堆栈不为空,它会丢弃,如果堆栈为空,它不会报告任何内容。当我运行 dropall 时,我会在堆栈上得到各种剩余的东西。

它看起来像这样:

2 3 4 5 6 7 8 9 10 dropall .s <9> -1 3 -1 5 -1 7 -1 9 -1 ok

我希望 dropall 会简单地清除堆栈而不会抱怨,因为 droploop 和 dropcatcher 似乎可以自己正常工作,但是唉,我不明白为什么 dropall 不起作用。

为什么 dropall 的工作方式似乎与 droploop 和 dropcatcher 不同?或者,我在这里做错了什么?

0 投票
3 回答
180 浏览

memory-management - 可以在没有“分配”的情况下使用字典内存吗?

我正在做一个编程练习,我试图以不同的方式做同样的事情。(我碰巧在 Forth 中将两个 3 元素向量相加)。在我的一个修订中,我使用返回堆栈来存储临时值(所以我正在使用该功能),但除此之外,我正在考虑使用未分配的内存作为临时存储。

我创建了两个词来访问这个内存:

我在实验中尝试过,它似乎对我正在做的事情有效。在我的例程完成后,我没有任何打算使用这个内存。而且我生活在字典中,其中的记忆已经被赋予了程序。

但是,我的直觉仍然告诉我,这是一件坏事。这是一件坏事吗?

如果重要的话,我正在使用Gforth

0 投票
2 回答
486 浏览

forth - Show the return stack

Can you show the return stack in Forth?

.S shows the parameter stack. Is there a similar word showing the contents of the return stack?

I found SHOWSTACK on the web, but it does't work.

0 投票
1 回答
307 浏览

forth - CREATE 和 VARIABLE 的区别

CREATE 和 VARIABLE 这两个词有什么区别?

例如,在这段代码中:

在这两种情况下,内存中的结果都是相同的。这样对吗?我什么时候应该用一个代替另一个?为什么?