问题标签 [esoteric-languages]
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.
python - 你对这些汇编助记符有什么建议吗?
在大学的最后一个学期,我在计算机语言课上的老师教我们一门名为Whitespace的深奥语言。为了在非常繁忙的日程(期中考试)中更好地学习这门语言,我用Python编写了一个解释器和汇编器。一种汇编语言旨在方便编写程序,并使用给定的汇编助记符编写了一个示例程序。
现在是夏天,一个新项目已经开始,目标是为 Whitespace 0.3 重写解释器和汇编器,之后会有进一步的发展。由于比以前有更多的时间来设计它,因此这里为您提供了一个大纲,该大纲为汇编语言提供了一组经过修改的助记符。这篇文章被标记为 wiki 供他们讨论。
你过去有过汇编语言的经验吗?是否有一些您认为应该重命名为不同的指令?您是否发现自己跳出框框思考并使用与命名助记符不同的范式?如果您对这些问题中的任何一个问题的回答都是肯定的,那么这里非常欢迎您。感谢主观回答!
堆栈操作(IMP:[空格])
堆栈操作是更常见的操作之一,因此 IMP [Space] 很短。有四个堆栈指令。
算术(IMP:[Tab][Space])
算术命令对栈顶的两项进行运算,并用运算结果替换它们。推送的第一个项目被认为是操作员的左侧。
堆访问(IMP:[Tab][Tab])
堆访问命令查看堆栈以查找要存储或检索的项目的地址。要存储项目,请先推送地址,然后推送值并运行存储命令。要检索项目,请推送地址并运行检索命令,这会将存储的值放置在堆栈顶部的位置。
流量控制 (IMP: [LF])
流量控制操作也很常见。子程序由标签标记,以及条件和无条件跳转的目标,通过这些标签可以实现循环。程序必须通过 [LF][LF][LF] 结束,这样解释器才能干净地退出。
I/O (IMP: [Tab][LF])
最后,我们需要能够与用户交互。有读写数字和单个字符的 IO 指令。有了这些,可以编写字符串操作例程。读取指令从栈顶获取存储结果的堆地址。
问题:您将如何重新设计、重写或重命名以前的助记符,原因是什么?
esoteric-languages - 如何运行深奥的语言僵尸
谁能告诉我如何编译和运行在 ZOMBIE 上编写的程序?例如,如果我编写了以下源代码以在屏幕上打印出“hello world”,我该如何制作一个 .exe 文件呢?谢谢!
programming-languages - 以 Q、U 和 Y 开头的语言中的“Hello World”
我开始了一个有趣的项目——为字母表中的每个字母收集一个“hello World”程序。例如Ada代表A,Boo代表B,C++代表C,D代表D,Erlang代表E,等等
但我有点卡住了,我找不到任何以字母Q、U和Y开头的编程语言
任何语言,最好不要来自esolang wiki?
更新:
以防万一有人感兴趣,我已经完成了我的收藏并 在我的博客中提供
esoteric-languages - 有什么方法可以让 Malbolge 的编程变得更容易吗?
安德鲁·库克(Andrew Cooke)必须创建一个遗传算法,才能在创建两年后为 Malbolge提出第一个“Hello World”程序。Hisashi Iizawa 能够在它创建八年后创建一个循环版本。有没有更简单的方法来创建“Hello World”程序?如果我想输出其他东西(即“你所有的基地都属于我们”),除了使用遗传算法之外,还有什么更简单的方法呢?
brainfuck - Brainfuck 中的无限计数循环
作为我的brainf*ck 实现的调试器/测试程序,我创建了以下计数循环:
使用单字节环绕单元格和带有环绕单元格的 30k 单元格,这将创建一个无限计数循环。它将每个单元格设置为 1,然后将每个单元格设置为 2,等等。
我的问题是,当它达到 255 时,内循环将单元格增加到 0,然后外循环立即将其增加到 1。这在溢出时充当“双步”,而不是单步。这是我可以让循环在这个紧凑的程序中无限继续的唯一方法。
每个单元格的计数0 -> 1 -> 2 ... 254 -> 255 -> 1 ...
虽然我希望它去0 -> 1 -> 2 ... 254 -> 255 -> 0 -> 1 ...
当前单元格为零时,很难继续循环。我玩过同一主题的变奏曲,但没有一个能做得恰到好处。
这个特定的程序只是一个用于测试的简单计数程序,但真正对我未来的程序有帮助的是知道如何反转循环条件,就像我需要使这个计数循环工作一样。
esoteric-languages - 如何在 Golfscript 中找到字符串的索引?
给定一个字符串“ABCDE”,我如何在 Golfscript 中找到另一个字符串“C”的出现索引?
? 运算符似乎不起作用(http://www.golfscript.com/golfscript/builtin.html#?):
“C”“ABCDE”?
obfuscation - 代码混淆,“风语者”风格
回到第二次世界大战(显然是第一次世界大战),交战各方使用的加密方案不断被破解。然后一些懂语言的天才意识到,用一种深奥的自然语言发送信息比任何密码都要好,因为语言在句法方面可以承受的巨大差异——例如纳瓦霍语与日语。基于纳瓦霍的代码未被破解。标题是电影参考。
所以你可以看到这是怎么回事。什么是一种好的语言,具有可用的本机编译器,很少有人知道,但足够强大,可以编写密钥认证模块?我想到了 Cobol,但找不到原生编译器,我的意思是直接编译成机器语言的编译器,而不是先翻译成 C 或其他标准语言,然后再编译 C。
我意识到在汇编级别可能都是一样的,但我仍然认为能够编写不可读的高级代码在某些情况下可能会有所帮助。
java - 在 Java 中不使用 if 语句
这是一个非常奇怪且非常具体的问题。
最终,我正在尝试编写一个程序转换,该程序接受 java 源代码,并将其转换为不使用(除其他外)
- 数组
- 循环
- 用户定义的方法
- 如果语句
这是我为自己设定的挑战,因为我的老师告诉我,不使用这些东西就不可能编写程序。
我已经解决了大部分问题,包括函数内联和数组替换,但是我不知道如何管理 if 语句。
在 C++ 中,我会使用标签和 goto,也许还有 ?:,但是 Java 不支持 GOTO 语句。
我的问题是:给定一段代码,
如何转换它以使其功能相同,但不使用 if 关键字。请注意,循环结构也是不可能的。
鉴于此,很容易创建 else 和 else if 语句。但是我也不确定如何使用它来创建循环,因为没有 GOTO 语句并且方法是不可能的。
编辑:请注意,开关也是不允许的,递归也是不允许的(因为您无法定义用户方法,并且递归主函数不适用于每个程序) ?: 运算符不适用于所有情况. AFAIK,您不能使用 ?: 调用 void 函数,因为它想在其操作中分配一个值。
这些条件来自 IB 计算机科学 SL 要求的课程,我正在学习 HL,作为一个班级,我们嘲笑 SL 的“掌握”因素,其中包括“if”语句(如果事实其中 3/15 是“用户定义的”带有参数和返回类型的方法)面临的挑战是有效地在 SL 中的掌握测试中失败,同时仍然产生一个正常运行的程序。
答案:(由 bdares 提供)
java - 高级 Java 控制台输入
作为一种自我实践,我正在用 Java 制作一个通过控制台执行 I/O 的BF解释器。在大多数情况下,这很好,但是,正如您可能知道的那样,BF 一次输入一个字符,包括换行符。这意味着据我所知,标准控制台输入库不起作用,因为它们接收整个字符串,然后在最后要求返回。我想,
接受下一个适合 a 的击键char
而不在键入时打印它。因此,当 BF 要求输入并且您输入 时a
,它会接收 ,a
但不会在控制台中显示它,除非 BF 程序a
稍后自行输出。
我怎样才能做到这一点?