imath 发表于 2020-6-14 23:15:25

XPicoC 2.32 基于Lua的Nspire机上C语言解释器

本帖最后由 imath 于 2020-6-14 23:30 编辑

如果有使用过 TI-Nspire 系列计算器的各位应该知道,要实现 TI-Nspire 计算器使用 C 语言来开发程序,必须通过类似 iOS 越狱的方法实现,例如通过安装 Ndless。在安装 Ndless 之后,不仅可以实现电脑上编译 C 程序在 TI-Nspire 计算器上执行,也可以实现直接在 TI-Nspire 机上编写及执行 C 程序,例如利用一款名为 dPicoC 的实用工具。但是,德州仪器官方对于此类越狱的行为始终是零容忍的态度,从 Ndless 发布伊始,就开始通过不断发布系统更新以及阻止降级的方式来封杀 Ndless。自从 2018 年底发布的 TI-Nspire CX II 计算器上搭载的 OS 5.0,以及 2019 年 3 月发布的 OS 4.5.1 开始,Ndless 社区就始终未能攻破德州仪器对 Ndless 的封杀至今。  因此我们需要在德州仪器官方允许在 TI-Nspire 计算器上使用的编程语言,也就是 TI-Lua 上寻找一定的突破。本文介绍的项目 XPicoC,是我们于 2020 年 5 月初利用 20 多天的时间,将一款轻量级、基于 C 语言的 C 解释器 PicoC,跨语言移植至 Lua 脚本语言的成果。  与其他任何在 TI-Nspire 计算器上执行 C 程序的方法不同,XPicoC 是纯粹建构于 Lua 脚本语言之上,不依赖任何其他 C 等等目标代码语言。因此同样可以在任何支持 TI-Lua 脚本语言的 TI-Nspire 系列计算器上执行,不需要任何安装 Ndless 等越狱操作。  XPicoC 并不是一个部分实现 C 标准的“玩具”语言。它几乎实现了所有最核心的 C 标准定义的内容,包括在 Lua 本身并不支持指针的情况下,成功实现了 C 最核心的特性——指针操作。  接下来我们来介绍 XPicoC 的核心特性。  启动包含 XPicoC 的 tns 文档,即可看到计算器的页面变为了一个命令提示符,此为 XPicoC 的交互模式,可以在此直接输入 C 代码并执行。https://pic1.zhimg.com/80/v2-6e6e802831beed7946a43b4b24d24308_720w.jpg  我们首先演示一个非常简单的范例,定义一个 Hello World 字符串并输出:https://pic1.zhimg.com/80/v2-c154f26d1220a500964a5ea2b7a2c6fc_720w.jpg  接下来我们演示指针操作,定义一个变量 b,不利用库函数将变量 a 的字符串拷贝到变量 b,并且输出变量 b 的内容:https://pic2.zhimg.com/80/v2-a2b0bd99cf21752e0fd9316ea875b255_720w.jpg  同样也可以利用内置的库函数 strcpy() 来完成这个操作:https://pic3.zhimg.com/80/v2-0b575b63761e009a4494d1f2b3659e66_720w.jpg  除了在交互模式中执行程序以外,XPicoC 也支持从剪贴板读取一整段的 C 程序来执行。例如下面是实现快速排序的算法,利用到了函数以及递归的特性:#include <stdio.h>
int array;
//Swap integervalues by array indexesvoid swap(int a, int b){    int tmp=array;   array = array;   array = tmp;}//Partition thearray into two halves and return the//index about whichthe array is partitionedint partition(int left, int right){    int pivotIndex = left;    int pivotValue = array;    int index = left;    int i;   swap(pivotIndex, right);    for(i= left; i < right; i++)    {       if(array < pivotValue)       {         swap(i, index);         index += 1;       }    }   swap(right, index);    returnindex;}//Quicksort thearrayvoid quicksort(int left, int right){    if(left>= right)       return;    int index = partition(left, right);   quicksort(left, index - 1);   quicksort(index + 1, right);}void main(){    int i;   array= 62;   array= 83;   array= 4;   array= 89;   array= 36;   array= 21;   array= 74;   array= 37;   array= 65;   array= 33;   array= 96;   array= 38;   array= 53;   array= 16;   array= 74;   array= 55;    for(i = 0;i < 16;i++)       printf("%d ", array);   printf("\n");   quicksort(0, 15);    for(i = 0;i < 16;i++)       printf("%d ", array);   printf("\n");}
  在计算器上新建一个“记事本”应用程序,将这段程序复制到“记事本”应用程序当中。然后我们按 Ctrl+A 全选代码,按 Ctrl+C 复制代码然后回到 1.1 页的 XPicoC 中,按 Ctrl+V 粘贴程序:https://pic2.zhimg.com/80/v2-8f9c0d539efbc024fc511dac249f1c21_720w.jpghttps://pic2.zhimg.com/80/v2-ad57e9c72b05b76f07fb65129a89d519_720w.jpg  以上就是 TI-Nspire 平台的 C 解释器 XPicoC 的简单介绍。
视野工作室www.horizonriver.cn
XPicoC作者:露露
E-mail:[email protected]
2020年6月14日

zyf722 发表于 2020-6-15 07:31:07

本帖最后由 zyf722 于 2020-6-15 17:41 编辑

事大佬 支持了
请问有进一步的头文件/函数说明吗?

1172884664 发表于 2020-6-17 08:27:08

好东西,赞一个

晨皓小盆友 发表于 2020-6-17 21:32:08

NB啊!支持大佬。

陈曙霞 发表于 2020-6-21 11:31:33

支持了

sandyzhang 发表于 2020-6-30 20:15:47

支持一下,另外希望能开源,毕竟这种东西还是大家共同学习比较好,也没有什么版权hhh
出现parse error之后按下任何键都没反应怎么办?只能重启tns吗?有点麻烦

sandyzhang 发表于 2020-6-30 20:19:11

看了一下,太强了,这样子nspire也支持简单的机上c语言了!!恭喜    膜拜大佬

ExAcler 发表于 2021-3-31 01:02:56

补充一下,XPicoC并非不开源,现补开源地址于此:
https://github.com/ExAcler/XPicoC

bioafanda 发表于 2021-9-29 17:03:26

真牛啊,太强了。

青婉娘 发表于 2022-12-2 12:50:33

这个不错的程序还有更新吗?

ExAcler 发表于 2023-5-12 12:57:21

青婉娘 发表于 2022-12-2 12:50
这个不错的程序还有更新吗?

当初开发这个玩意的初衷是一个proof of concept。
至于如何更新,有什么样的功能方面的idea,我觉得还是交给感兴趣的各路大神吧(

青婉娘 发表于 2023-6-20 00:52:48

ExAcler 发表于 2023-5-12 12:57
当初开发这个玩意的初衷是一个proof of concept。
至于如何更新,有什么样的功能方面的idea,我觉得还是 ...

可否添加个联系方式?我试着自己开发下

ExAcler 发表于 2023-6-23 10:30:41

本帖最后由 ExAcler 于 2023-6-23 10:35 编辑

青婉娘 发表于 2023-6-20 00:52
可否添加个联系方式?我试着自己开发下
本身就是开源的,诚挚欢迎进行二次开发。
https://github.com/ExAcler/XPicoC
您可以加我QQ: 496937921,不过最近估计不怎么有空。。
页: [1]
查看完整版本: XPicoC 2.32 基于Lua的Nspire机上C语言解释器