Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
OpenXiangShan
NEMU
提交
3ee09a93
N
NEMU
项目概览
OpenXiangShan
/
NEMU
大约 1 年 前同步成功
通知
7
Star
171
Fork
67
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
N
NEMU
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
3ee09a93
编写于
10月 06, 2018
作者:
Z
Zihao Yu
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
tools,gen-expr: update
上级
dbd95d05
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
25 addition
and
25 deletion
+25
-25
tools/gen-expr/gen-expr.c
tools/gen-expr/gen-expr.c
+25
-25
未找到文件。
tools/gen-expr/gen-expr.c
浏览文件 @
3ee09a93
...
...
@@ -16,12 +16,12 @@ static inline uint32_t choose(uint32_t max) {
}
static
inline
void
gen_rand_op
()
{
char
op_list
[
4
]
=
{
'+'
,
'-'
,
'*'
,
'/
'
};
format_buf
(
"%c"
,
op_list
[
choose
(
4
)]);
char
op_list
[
]
=
{
'+'
,
'-'
,
'*'
,
'/'
,
'+'
,
'-'
,
'*
'
};
format_buf
(
"%c"
,
op_list
[
choose
(
7
)]);
}
static
inline
void
gen_num
()
{
format_buf
(
"%uu"
,
choose
(
64
));
format_buf
(
"%uu"
,
rand
(
));
}
static
inline
void
gen_space
()
{
...
...
@@ -37,8 +37,8 @@ static int nr_op = 0;
static
inline
void
gen_rand_expr
()
{
gen_space
();
switch
(
choose
(
4
))
{
case
0
:
switch
(
choose
(
3
))
{
default
:
if
(
nr_op
==
0
)
gen_rand_expr
();
else
gen_num
();
break
;
...
...
@@ -47,29 +47,22 @@ static inline void gen_rand_expr() {
gen_rand_expr
();
format_buf
(
")"
);
break
;
default
:
case
0
:
nr_op
++
;
if
(
choose
(
2
))
gen_rand_expr
();
else
gen_num
();
if
(
pbuf
-
buf
>=
sizeof
(
buf
)
/
2
)
{
gen_num
();
break
;
}
gen_rand_expr
();
gen_space
();
gen_rand_op
();
gen_space
();
if
(
choose
(
2
))
gen_rand_expr
();
else
gen_num
();
gen_rand_expr
();
break
;
}
gen_space
();
}
void
remove_u
(
char
*
p
)
{
char
*
q
=
p
;
while
((
q
=
strchr
(
q
,
'u'
))
!=
NULL
)
{
// reuse code_buf
strcpy
(
code_buf
,
q
+
1
);
strcpy
(
q
,
code_buf
);
}
}
static
char
code_buf
[
65536
];
static
char
*
code_format
=
"#include <stdio.h>
\n
"
...
...
@@ -79,6 +72,15 @@ static char *code_format =
" return 0; "
"}"
;
void
remove_u
(
char
*
p
)
{
char
*
q
=
p
;
while
((
q
=
strchr
(
q
,
'u'
))
!=
NULL
)
{
// reuse code_buf
strcpy
(
code_buf
,
q
+
1
);
strcpy
(
q
,
code_buf
);
}
}
int
main
(
int
argc
,
char
*
argv
[])
{
int
seed
=
time
(
0
);
srand
(
seed
);
...
...
@@ -100,15 +102,13 @@ int main(int argc, char *argv[]) {
fputs
(
code_buf
,
fp
);
fclose
(
fp
);
int
ret
=
system
(
"gcc .code.c -o .expr"
);
if
(
ret
!=
0
)
continue
;
fp
=
popen
(
"./.expr"
,
"r"
);
fp
=
popen
(
"gcc .code.c -Wall -Werror -o .expr && ./.expr"
,
"r"
);
assert
(
fp
!=
NULL
);
int
result
;
fscanf
(
fp
,
"%d"
,
&
result
);
pclose
(
fp
);
int
ret
=
pclose
(
fp
);
if
(
ret
!=
0
)
continue
;
remove_u
(
buf
);
printf
(
"%u %s
\n
"
,
result
,
buf
);
}
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录