mirror of
https://gitee.com/Lyon1998/pikapython.git
synced 2025-01-29 17:22:56 +08:00
change shell to pika asm
This commit is contained in:
parent
3f87706ebd
commit
9edaad9fa8
@ -9,8 +9,8 @@ extern "C" {
|
||||
TEST(parser, NEW) {
|
||||
AST* ast = pikaParse((char*)"add(a,b)");
|
||||
Args* buffs = New_strBuff();
|
||||
char* sh = AST_toShell(ast, buffs);
|
||||
printf("%s", sh);
|
||||
char* pikaAsm = AST_toPikaAsm(ast, buffs);
|
||||
printf("%s", pikaAsm);
|
||||
AST_deinit(ast);
|
||||
args_deinit(buffs);
|
||||
EXPECT_EQ(pikaMemNow(), 0);
|
||||
@ -19,9 +19,9 @@ TEST(parser, NEW) {
|
||||
TEST(parser, add_a_b) {
|
||||
AST* ast = pikaParse((char*)"add( a , b)");
|
||||
Args* buffs = New_strBuff();
|
||||
char* sh = AST_toShell(ast, buffs);
|
||||
printf("%s", sh);
|
||||
EXPECT_STREQ(sh, "1 REF a\n1 REF b\n0 RUN add\n");
|
||||
char* pikaAsm = AST_toPikaAsm(ast, buffs);
|
||||
printf("%s", pikaAsm);
|
||||
EXPECT_STREQ(pikaAsm, "1 REF a\n1 REF b\n0 RUN add\n");
|
||||
AST_deinit(ast);
|
||||
args_deinit(buffs);
|
||||
EXPECT_EQ(pikaMemNow(), 0);
|
||||
@ -30,9 +30,9 @@ TEST(parser, add_a_b) {
|
||||
TEST(parser, add_a_b_c) {
|
||||
AST* ast = pikaParse((char*)"d = add(add(a,b) , c)");
|
||||
Args* buffs = New_strBuff();
|
||||
char* sh = AST_toShell(ast, buffs);
|
||||
printf("%s", sh);
|
||||
EXPECT_STREQ(sh, "2 REF a\n2 REF b\n1 RUN add\n1 REF c\n0 RUN add\n0 OUT d\n");
|
||||
char* pikaAsm = AST_toPikaAsm(ast, buffs);
|
||||
printf("%s", pikaAsm);
|
||||
EXPECT_STREQ(pikaAsm, "2 REF a\n2 REF b\n1 RUN add\n1 REF c\n0 RUN add\n0 OUT d\n");
|
||||
AST_deinit(ast);
|
||||
args_deinit(buffs);
|
||||
EXPECT_EQ(pikaMemNow(), 0);
|
||||
@ -41,9 +41,9 @@ TEST(parser, add_a_b_c) {
|
||||
TEST(parser, method1) {
|
||||
AST* ast = pikaParse((char*)"d.p = a.add(b.add(a,se.b) , pmw.c)");
|
||||
Args* buffs = New_strBuff();
|
||||
char* sh = AST_toShell(ast, buffs);
|
||||
printf("%s", sh);
|
||||
EXPECT_STREQ(sh,
|
||||
char* pikaAsm = AST_toPikaAsm(ast, buffs);
|
||||
printf("%s", pikaAsm);
|
||||
EXPECT_STREQ(pikaAsm,
|
||||
"2 REF a\n2 REF se.b\n1 RUN b.add\n1 REF pmw.c\n0 RUN a.add\n0 OUT d.p\n");
|
||||
AST_deinit(ast);
|
||||
args_deinit(buffs);
|
||||
@ -54,9 +54,9 @@ TEST(parser, method2) {
|
||||
AST* ast =
|
||||
pikaParse((char*)"d.p = a.add(b.add(a,se.b,diek(pp)) , pmw.c())");
|
||||
Args* buffs = New_strBuff();
|
||||
char* sh = AST_toShell(ast, buffs);
|
||||
printf("%s", sh);
|
||||
EXPECT_STREQ(sh,
|
||||
char* pikaAsm = AST_toPikaAsm(ast, buffs);
|
||||
printf("%s", pikaAsm);
|
||||
EXPECT_STREQ(pikaAsm,
|
||||
"2 REF a\n2 REF se.b\n3 REF pp\n2 RUN diek\n1 RUN b.add\n1 RUN pmw.c\n0 RUN a.add\n0 OUT d.p\n");
|
||||
AST_deinit(ast);
|
||||
args_deinit(buffs);
|
||||
|
@ -100,7 +100,7 @@ exit:
|
||||
return ast;
|
||||
}
|
||||
|
||||
char* AST_appandShell(AST* ast, AST* subAst, Args* buffs, char* sh) {
|
||||
char* AST_appandPikaAsm(AST* ast, AST* subAst, Args* buffs, char* pikaAsm) {
|
||||
uint32_t deepth = obj_getInt(ast, "deepth");
|
||||
while (1) {
|
||||
QueueObj* subStmt = queueObj_popObj(subAst);
|
||||
@ -108,7 +108,7 @@ char* AST_appandShell(AST* ast, AST* subAst, Args* buffs, char* sh) {
|
||||
break;
|
||||
}
|
||||
obj_setInt(ast, "deepth", deepth + 1);
|
||||
sh = AST_appandShell(ast, subStmt, buffs, sh);
|
||||
pikaAsm = AST_appandPikaAsm(ast, subStmt, buffs, pikaAsm);
|
||||
}
|
||||
char* method = obj_getStr(subAst, "method");
|
||||
char* ref = obj_getStr(subAst, "ref");
|
||||
@ -116,26 +116,26 @@ char* AST_appandShell(AST* ast, AST* subAst, Args* buffs, char* sh) {
|
||||
if (NULL != ref) {
|
||||
char buff[32] = {0};
|
||||
sprintf(buff, "%d REF %s\n", deepth, ref);
|
||||
sh = strsAppend(buffs, sh, buff);
|
||||
pikaAsm = strsAppend(buffs, pikaAsm, buff);
|
||||
}
|
||||
if (NULL != method) {
|
||||
char buff[32] = {0};
|
||||
sprintf(buff, "%d RUN %s\n", deepth, method);
|
||||
sh = strsAppend(buffs, sh, buff);
|
||||
pikaAsm = strsAppend(buffs, pikaAsm, buff);
|
||||
}
|
||||
if (NULL != direct) {
|
||||
char buff[32] = {0};
|
||||
sprintf(buff, "%d OUT %s\n", deepth, direct);
|
||||
sh = strsAppend(buffs, sh, buff);
|
||||
pikaAsm = strsAppend(buffs, pikaAsm, buff);
|
||||
}
|
||||
obj_setInt(ast, "deepth", deepth - 1);
|
||||
return sh;
|
||||
return pikaAsm;
|
||||
}
|
||||
|
||||
char* AST_toShell(AST* ast, Args* buffs) {
|
||||
char* sh = strsCopy(buffs, "");
|
||||
char* AST_toPikaAsm(AST* ast, Args* buffs) {
|
||||
char* pikaAsm = strsCopy(buffs, "");
|
||||
obj_setInt(ast, "deepth", 0);
|
||||
return AST_appandShell(ast, ast, buffs, sh);
|
||||
return AST_appandPikaAsm(ast, ast, buffs, pikaAsm);
|
||||
}
|
||||
|
||||
int32_t AST_deinit(AST* ast) {
|
||||
|
@ -5,6 +5,6 @@
|
||||
typedef QueueObj AST;
|
||||
AST* pikaParse(char* line);
|
||||
int32_t AST_deinit(AST* ast);
|
||||
char* AST_toShell(AST* ast, Args* buffs);
|
||||
char* AST_toPikaAsm(AST* ast, Args* buffs);
|
||||
|
||||
#endif
|
Loading…
x
Reference in New Issue
Block a user