600字范文,内容丰富有趣,生活中的好帮手!
600字范文 > javascript格式化输出的实现(MuJS)

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

时间:2023-07-28 05:19:08

相关推荐

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

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");}

print.js

print("hello", 12);

执行结果

[root@bogon javascript]# ./printhello 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++] = '\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");}

printf.js

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

执行结果

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

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

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。