标签: gforth

Sublime Text 2的语法高亮?

我一直在环顾四周,并没有找到Gforth的语法定义在Sublime Text中使用.

有吗?我找到了一个用于TextPad,但这是关于它的(参见TextPad语法定义).是否可以将TextPad转换为使用Sublime Text 2?

syntax-highlighting forth sublimetext2 gforth

5
推荐指数
1
解决办法
1211
查看次数

Gforth将字符串值存储在变量中

我正在尝试将字符串值存储到变量中.要定义变量,我使用:

: define CREATE 0 , ;
define x
Run Code Online (Sandbox Code Playgroud)

我可以轻松地存储整数/浮点值来x使用

10 x !
Run Code Online (Sandbox Code Playgroud)

要么

10.0e x f!
Run Code Online (Sandbox Code Playgroud)

要访问它我使用@f@.现在我正在尝试存储一个字符串值:

s" hello world" x !
Run Code Online (Sandbox Code Playgroud)

这个问题是它将两个值推送到堆栈(因为它是一个计数字符串),但x !只会将项目存储在顶部,这是字符串的长度.这是危险的,因为堆栈内容可能已被x引用的时间修改,使得地址不直接低于长度(坏!),因此type会失败.所以我的问题是,有没有办法将两个值(地址和长度)存储到x?或者是否有不同的数据类型/操作数可以让我实现这一目标?

任何帮助表示赞赏.

string variables forth gforth

5
推荐指数
1
解决办法
1020
查看次数

如何在Forth中实现Y-combinator?

Rosetta Code上,Forth中没有实现Y-combinator.

我怎样才能做到这一点?如何在Forth中使用Y-combinator?为什么?

computer-science forth gforth

5
推荐指数
2
解决办法
341
查看次数

如何列出Forth中的当前单词集

是否有可能获得当前在Forth中定义的所有单词的列表(例如在Gforth中)?

forth gforth

5
推荐指数
1
解决办法
588
查看次数

使用'see'对Forth代码字进行反汇编

我正在建设一个Forth解释准备全面的知识,并希望拆卸一些通用的第四码字如+,-,*,等.

我的Gforth(我目前在Ubuntu Linux上安装了0.7.3版本)将允许我用命令反汇编冒号定义,see以及单个代码字..但是当我用其他代码词尝试它时,see +或者see /,我得到一个错误,Code +然后我就不能再输入我的终端了,即使我按下control-c.

我应该能够反编译/反汇编代码字,如Gforth手册所示:https://www.complang.tuwien.ac.at/forth/gforth/Docs-html/Decompilation-Tutorial.html

有没有其他人有这个问题,你知道如何解决它吗?

forth gforth

5
推荐指数
1
解决办法
561
查看次数

GForth:将浮点数转换为String

一个简单的问题原来非常复杂:

如何在GForth中将浮点数转换为字符串?所需的行为如下所示:

1.2345e fToString \ takes 1.2345e from the float stack and pushes (addr n) onto the data stack
Run Code Online (Sandbox Code Playgroud)

forth gforth

5
推荐指数
1
解决办法
116
查看次数

Forth 中有条件退出的说法吗?

在 Forth 中,如果栈顶为零,是否有一个常用词来有条件地退出过程(返回)?我正在考虑在递归过程中使用它而不是 IF。

forth gforth

5
推荐指数
1
解决办法
99
查看次数

在Forth中对字符串数组进行排序

我曾经用来CREATE创建一个字符串数组:

create mystringarray s" This" , s" is" , s" a", s" list" ,
Run Code Online (Sandbox Code Playgroud)

我想按升序排序.我在线发现了汇编语言的一些教程,但我想在Forth中完成.什么是最佳实践方法?

sorting forth gforth

4
推荐指数
2
解决办法
264
查看次数

如何在 Forth 中包含 C 库

默认情况下,Forth 只有少量的工作库,所以一切都必须从头开始编程。原因是,基于堆栈的 Forth 虚拟机将自己标识为一个超薄系统。

根据 Gforth 手册,可以使用现有的 C 库并访问用 C 编写的预编译图形库和游戏引擎。 C项目。

我从头开始用 C 创建了一个库。它提供了一个 add 函数,可以从主程序中调用。这些文件被编译和链接,它工作正常。

### add.c ###
int add(int a, int b) {
  return a + b;
}
### add.h ###
int add(int, int);

### main.c ###
#include <stdio.h>
#include "add.h"
void main() {
  printf("5 + 7 = %d\n", add(5,7));
}

### compile ###
gcc -c -fPIC add.c
gcc -c main.c
gcc main.o add.o
./a.out
5 + 7 = 12
Run Code Online (Sandbox Code Playgroud)

计划是使用这个来自 Forth 的预编译 c 库。Gforth 编译器为此提供了一个特殊的关键字,它将 Forth …

forth ffi include gforth

4
推荐指数
1
解决办法
534
查看次数

如何在Forth中转储单词?

目的是在字典中创建一个Forth单词,然后打印出该单词的内存内容。第一步很容易。这个: main词的创建方法与教程中所述相同。创建单词后,字典指针将移至下一个位置,因此我必须从中减去一些项目,现在可以转储创建单词的内存区域了:

\ create a dummy routine
: main 1 dup + . ;

\ put dictionary pointer to the stack
\ and subtract 50 indizies
dp 50 - 

\ print out 20 cells to the screen from dp-50 until dp+50
\ but where is my newly created routine ": main"?
100 dump

bye
------
gforth "a.fs"

7F81DF443FC6: 00 00 20 17  12 AF 60 55 - 00 00 04 00  00 00 00 00  .. ...`U........
7F81DF443FD6: …
Run Code Online (Sandbox Code Playgroud)

forth gforth

4
推荐指数
1
解决办法
154
查看次数