change shell to pika asm

This commit is contained in:
lyon1998 2021-10-13 22:17:40 +08:00
parent 3f87706ebd
commit 9edaad9fa8
3 changed files with 24 additions and 24 deletions

View File

@ -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);

View File

@ -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) {

View File

@ -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