记录大括号!!!
遇到if则判断语句,接下来,然后假设判断式成立,执行if紧跟着的语句,把大括号括起来的当成一个语句,执行下去,如果没有else的话就继续,有else的话跳过else所包含的范围.
❷ 怎么用c语言写脚本解释器
泠泠七弦上,静听松风寒。
古调虽自爱,今人多不弹。
泠泠七弦上,静听松风寒。
古调虽自爱,今人多不弹。
泠泠七弦上,静听松风寒。
古调虽自爱,今人多不弹。
泠泠七弦上,静听松风寒。
古调虽自爱,今人多不弹。
❸ 谁帮我使用C语言编写一个JavaScript脚本解释器急求
这个比价麻烦1)
JS 语法,至少表达式,变量要有。
2)HTML
document.write
需要写在HTML对应的位置。
❹ 如何用C语言实现C的解释器
将C语言翻译成“汇编”塞到内存里,然后用“虚拟机”来跑这段汇编。
因此我们需要的东西是:
一个虚拟机:用来跑下面这种汇编。
一种汇编:用来描述原来的C语言。
一个“翻译器”:将C语言翻译成上面这种汇编。
❺ C语言中_是什么意思有什么用处
C语言中_是标识符中的合法字符之一。它通常用来隔离标识符中的各个单词,例如room_1,也可以用来与另一同名变量进行区分,例如,int ab,_ab;
❻ 用c语言写一个算术表达式的解释器,但这解释器里面要用到词法分析器的结果怎么套进去是两个不同的程序呀
用c语言写一个算术表达式的解释器,但这解释器里面要用到词法分析器的结果怎么套进去是两个不同的程
❼ 如何用c语言写一个shell
鸟哥是不会有这个的,可以这样想(感觉这样很麻烦,只用一对管道应该也可以,流程也能简单,控制好进程顺序就行。这个编得过):
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <fcntl.h>
#include <unistd.h>
#include <sys/wait.h>
#define CMD_LINE 1024
#define PIPE_MAX 16
#define ARG_MAX 10
typedef struct {
char *arg[ARG_MAX];
char *in;
char *out;
} cmd_t;
extern int parse_token(char *buf, cmd_t cmd[]);
extern int parse(char *buf, cmd_t * cmd);
extern int test_parse(cmd_t cmd[], int len);
int main(int argc, char *argv[])
{
char buf[CMD_LINE];
cmd_t cmd[PIPE_MAX + 1];
int fd[PIPE_MAX][2];
int j, i;
int cmd_len, pipe_len;
pid_t pid;
while (1) {
printf("my_shell#");
fgets(buf, CMD_LINE, stdin);
buf[strlen(buf) - 1] = '\0';
cmd_len = parse_token(buf, cmd);
pipe_len = cmd_len - 1;
if (pipe_len > PIPE_MAX)
continue;
for (i = 0; i < pipe_len; ++i)
pipe(fd[i]);
for (i = 0; i < cmd_len; ++i)
if ((pid = fork()) == 0)
break;
if (pid == 0) {
if (pipe_len) {
if (i == 0) {
close(fd[i][0]);
p2(fd[i][1], 1);
close(fd[i][1]);
for (j = 1; j < pipe_len; ++j)
close(fd[j][0]),
close(fd[j][1]);
} else if (i == pipe_len) {
close(fd[i - 1][1]);
p2(fd[i - 1][0], 0);
close(fd[i - 1][0]);
for (j = 0; j < pipe_len - 1; ++j)
close(fd[j][0]),
close(fd[j][1]);
} else {
p2(fd[i - 1][0], 0);
close(fd[i][0]);
p2(fd[i][1], 1);
close(fd[i][1]);
for (j = 0; j < pipe_len; ++j) {
if ((j != i - 1)
|| (j != i))
close(fd[j][0]),
close(fd[j]
[1]);
}
}
}
if (cmd[i].in) {
int fd = open(cmd[i].in, O_RDONLY);
p2(fd, STDIN_FILENO);
close(fd);
}
if (cmd[i].out) {
int fd =
open(cmd[i].out,
O_RDWR | O_CREAT | O_TRUNC, 0644);
p2(fd, STDOUT_FILENO);
close(fd);
}
execvp(cmd[i].arg[0], cmd[i].arg);
fprintf(stderr, "Failed exec\n");
exit(127);
}
/* parent */
for (i = 0; i < pipe_len; ++i)
close(fd[i][0]), close(fd[i][1]);
for (i = 0; i < cmd_len; ++i)
wait(NULL);
}
return 0;
}
int parse_token(char *buf, cmd_t cmd[])
{
int n = 0;
#if 1
char *save_p;
char *p = strtok_r(buf, "|", &save_p);
while (p != NULL) {
parse(p, &cmd[n++]);
p = strtok_r(NULL, "|", &save_p);
}
#else
cmd[n].arg[0] = "ls";
cmd[n].arg[1] = "-l";
cmd[n].arg[2] = NULL;
#endif
return n;
}
int test_parse(cmd_t cmd[], int len)
{
int i;
for (i = 0; i < len; ++i) {
printf("cmd[%d]:", i);
int j = 0;
while (cmd[i].arg[j])
printf(" %s", cmd[i].arg[j++]);
if (cmd[i].in)
printf("\tin:%s", cmd[i].in);
if (cmd[i].out)
printf("\tout:%s", cmd[i].out);
printf("\n");
}
return 0;
}
int parse(char *buf, cmd_t * cmd)
{
int i = 0;
cmd->in = NULL;
cmd->out = NULL;
char *p = strtok(buf, " ");
while (p) {
if (*p == '<') {
if (*(p + 1))
cmd->in = p + 1;
else
cmd->in = strtok(NULL, " ");
} else if (*p == '>') {
if (*(p + 1))
cmd->out = p + 1;
else
cmd->out = strtok(NULL, " ");
} else
cmd->arg[i++] = p;
p = strtok(NULL, " ");
}
cmd->arg[i] = NULL;
return 0;
}
❽ 如何用C语言写一个shell命令解释器
支持的基本命令需求什么?你要做个cmd这样的来给你个1年估计都不够~
❾ C语言是由什么语言编写而成的
我想,你问的是 C语言编译器 是用什么语言写的。
概括说,当今几乎所有的实用的编译器/解释器都是用C语言编写的,有一些语言比如Clojure,Jython等是基于JVM或者说是用Java实现的,IronPython等是基.NET实现的,但是Java和C#等本身也要依靠C/C++来实现,等于是间接调用了C。
世界上第一个C语言编译器,是在B语言基础上,用B语言与PDP汇编语言 编写的。开发过程是先用汇编写了一个最基本功能的子集C0,利用自编译Self-Compile功能,或虚拟机CVM(C Language Virtual Machine)功能,增添新的东西,变C1, 按此法多次增添发展,滚雪球般用汇编把小雪球揉到一起,1生2,2生3,...成了C。C 再生万物。
这里,该向C语言之父Dennis Ritchie(丹尼斯·里奇)致敬。
❿ 求解释代码,有关用c语言写一个简单的shell解释器的
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <fcntl.h>
#include <unistd.h>
#include <sys/wait.h>
#define CMD_LINE 1024
#define PIPE_MAX 16
#define ARG_MAX 10
typedef struct {
char *arg[ARG_MAX];
char *in;
char *out;
} cmd_t;
extern int parse_token(char *buf, cmd_t cmd[]);
extern int parse(char *buf, cmd_t * cmd);
extern int test_parse(cmd_t cmd[], int len);
int main(int argc, char *argv[])
{
char buf[CMD_LINE];
cmd_t cmd[PIPE_MAX + 1];
int fd[PIPE_MAX][2];
int j, i;
int cmd_len, pipe_len;
pid_t pid;
while (1) {
printf("my_shell#"); //打印提示符
fgets(buf, CMD_LINE, stdin); //获得输入
buf[strlen(buf) - 1] = '