javascript格式化输出的实现(MuJS)

javascript格式化输出的实现(MuJS)MuJS是一款支持嵌入式开发的轻量级javascript解释器。javascript主要是针对web开发的脚本语言,所以主要借助浏览器来调试;但mujs针对的是嵌入式开发,调试时的交互主要靠输入输出终端,javascript本身是不支持的,所以需要调用c语言的打印函数来实现。下面给出两个例子,一个是普通输出,符合脚本语言的解释性语言的特点,不考虑变量的类型;另一个是简单的格式化输出。前一个…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全家桶1年46,售后保障稳定

MuJS是一款支持嵌入式开发的轻量级javascript解释器。
javascript主要是针对web开发的脚本语言,所以主要借助浏览器来调试;但mujs针对的是嵌入式开发,调试时的交互主要靠输入输出终端,javascript本身是不支持的,所以需要调用c语言的打印函数来实现。

下面给出两个例子,一个是普通输出,符合脚本语言的解释性语言的特点,不考虑变量的类型;另一个是简单的格式化输出。前一个例子是mujs开源包中main.c的例子,拿来做参考。

1.普通输出
print.c

#include <stdio.h>
#include <mujs.h>

static void jsB_print(js_State *J)
{
    int i, top = js_gettop(J);
    for (i = 1; i<top; ++i)
    {
        const char *s = js_tostring(J, i);
        if(i>1)
        {
        putchar(' ');
        }
        fputs(s, stdout);
    }

    putchar('\n');
    js_pushundefined(J);
}

void main(void)
{
    js_State *J = js_newstate(NULL, NULL, JS_STRICT);

    js_newcfunction(J, jsB_print, "print", 0);
    js_setglobal(J, "print");

    js_dofile(J, "print.js");

}

Jetbrains全家桶1年46,售后保障稳定

print.js

print("hello", 12);

执行结果

[root@bogon javascript]# ./print
hello 12

2.格式化输出
printf.c

#include <stdio.h>
#include <mujs.h>


void  jsB_printf(js_State *J)
{
   int i,j, top = js_gettop(J);
   const char *p = js_tostring(J, 1);
   int data;
   float fdata;
   const char * str;
   char c;
   char buff[10];
   i = 2;
   for(;*p;p++)
   {
       if(*p !='%')
       {
           putchar(*p);
           continue;
       }
       if(*p=='%'&&*(p+1)=='%')
       {
           putchar(*++p);
           continue;
       }

      j = 0;
      buff[j++] = '%';
      while((c=*++p))
      {
          if(c == 'd' || c=='f' || c=='x' || c=='s')
          {
             break; 
          }
          buff[j++] = c;
          if(j>=9)
          {
             return;
          }
      }
      buff[j++] = c;
      buff[j++] = '
#include <stdio.h>
#include <mujs.h>
void  jsB_printf(js_State *J)
{
int i,j, top = js_gettop(J);
const char *p = js_tostring(J, 1);
int data;
float fdata;
const char * str;
char c;
char buff[10];
i = 2;
for(;*p;p++)
{
if(*p !='%')
{
putchar(*p);
continue;
}
if(*p=='%'&&*(p+1)=='%')
{
putchar(*++p);
continue;
}
j = 0;
buff[j++] = '%';
while((c=*++p))
{
if(c == 'd' || c=='f' || c=='x' || c=='s')
{
break; 
}
buff[j++] = c;
if(j>=9)
{
return;
}
}
buff[j++] = c;
buff[j++] = '\0';
switch(c)
{
case 'd':
data = js_tonumber(J, i); 
printf(buff, data);
break;
case 'f':
fdata = js_tonumber(J, i);
printf(buff, fdata);
break;
case 'x':
data = js_tonumber(J, i);
printf(buff, data);
break;
case 's':
str = js_tostring(J, i);
printf(buff, str);
break;
default:
printf("\nerror:unsupported formats!\n");    
return;
break;
}
i++;
}
js_pushundefined(J);
}
void main(void)
{
js_State *J = js_newstate(NULL, NULL, JS_STRICT);
js_newcfunction(J, jsB_printf, "printf", 0);
js_setglobal(J, "printf");
js_dofile(J, "printf.js");
}
'
; switch(c) { case 'd': data = js_tonumber(J, i); printf(buff, data); break; case 'f': fdata = js_tonumber(J, i); printf(buff, fdata); break; case 'x': data = js_tonumber(J, i); printf(buff, data); break; case 's': str = js_tostring(J, i); printf(buff, str); break; default: printf("\nerror:unsupported formats!\n"); return; break; } i++; } js_pushundefined(J); } void main(void) { js_State *J = js_newstate(NULL, NULL, JS_STRICT); js_newcfunction(J, jsB_printf, "printf", 0); js_setglobal(J, "printf"); js_dofile(J, "printf.js"); }

printf.js

printf("value:%d%%, value:%d, value:0x%02x, value:%s\n", 60, 108, 16, "hello");
printf("value:%p",100);

执行结果

[root@bogon javascript]# ./printf
value:60%, value:108, value:0x10, value:hello
value:
error:unsupported formats!

实现了js的标准终端输出,对js的调试有很大的帮助;上面格式化代码中只实现了几个常用的格式符,我想对于debug调试应该是够了,如果有其他需求,可以再往里面加。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/230947.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • 1.23 lseek函数

    1.23 lseek函数参考:牛客网C++高薪求职项目《Linux高并发服务器开发》1.22read、write函数专属优惠链接:https://www.nowcoder.com/courses/cover/live/504?coupon=AvTPnSG

  • 小米手机1亿像素跟相机(2020相机新品)

    小米集团旗下品牌Redmi再度发布多款“性价比之王”手机新品。11月26日,小米发布RedmiNote9系列的Note9Pro、Note95G和Note94G三款手机新品,三款手机价格均位于“千元档”甚至低于千元,再度成为市场上同价位机型中的“性价比之王”。对此,小米集团副总裁、中国区总裁、Redmi品牌总经理卢伟冰重申,“Redmi的想法很简单,就是为用户做好产品,然后价格卖的尽量厚道,坚持高端产品大众化,大众产品品质化。”此次小米推出的Note9Pro沿袭了之前的Note8Pro在超清

  • Visual Studio 2012 Ultimate旗舰版序列号

    Visual Studio 2012 Ultimate旗舰版序列号VisualStudio2012Ultimate旗舰版序列号:YKCW6-BPFPF-BT8C9-7DCTH-QXGWCYQ7PR-QTHDM-HCBCV-9GKGG-TB2TM转载于:https://www.cnblogs.com/jiayue360/p/3166844.html

  • 小米手机解锁BL以及获取Root权限(开发版)

    小米手机解锁BL以及获取Root权限(开发版)已经很久没有刷机了,现在有需要,就再刷一下。想起来自己以前刷机很流畅,现在还得查来查去的。所以就写了以下教程,主要是记录一下自己踩过的一些坑。我刷的手机是小米8,所以以下教程都是小米8为例,其他手机可能还有细微不同之处…….一、解锁BL:这是官方教程,很详细!我就是在教程中,把自己踩过的一些坑给罗列一下,增加一下自己的印象。解锁Bootloader的步骤:解锁前,请将版…

  • 字符串截取substring方法

    字符串截取substring方法今天截取字符串截取多一个,研究了一下我们吧电话号为字符串开始截取错误示范Stringtel=”159-4322-1515″;intindex=tel.indexOf(“-“);//3intlastIndex=tel.lastIndexOf(“-“);//8Strings=tel.substring(0,index);//159Strings1=tel.substring(index

  • python 平均值/MAX/MIN值 计算从入门到精通「建议收藏」

    python 平均值/MAX/MIN值 计算从入门到精通「建议收藏」##入门级计算####1、算数平均值#样本:S=[s1,s2,s3,…,sn]#算术平均值:m=(s1+s2+s3+…+sn)/nNumpy中的写法m=

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号