mirror of
https://gitee.com/Lyon1998/pikapython.git
synced 2025-01-29 17:22:56 +08:00
parse to asm direct
This commit is contained in:
parent
db928b1ec1
commit
d46112705f
@ -12,6 +12,7 @@ TEST(parser, NEW) {
|
|||||||
char* pikaAsm = AST_toPikaAsm(ast, buffs);
|
char* pikaAsm = AST_toPikaAsm(ast, buffs);
|
||||||
printf("%s", pikaAsm);
|
printf("%s", pikaAsm);
|
||||||
args_deinit(buffs);
|
args_deinit(buffs);
|
||||||
|
AST_deinit(ast);
|
||||||
EXPECT_EQ(pikaMemNow(), 0);
|
EXPECT_EQ(pikaMemNow(), 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -22,6 +23,7 @@ TEST(parser, add_a_b) {
|
|||||||
printf("%s", pikaAsm);
|
printf("%s", pikaAsm);
|
||||||
EXPECT_STREQ(pikaAsm, "1 REF a\n1 REF b\n0 RUN add\n");
|
EXPECT_STREQ(pikaAsm, "1 REF a\n1 REF b\n0 RUN add\n");
|
||||||
args_deinit(buffs);
|
args_deinit(buffs);
|
||||||
|
AST_deinit(ast);
|
||||||
EXPECT_EQ(pikaMemNow(), 0);
|
EXPECT_EQ(pikaMemNow(), 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -30,8 +32,10 @@ TEST(parser, add_a_b_c) {
|
|||||||
Args* buffs = New_strBuff();
|
Args* buffs = New_strBuff();
|
||||||
char* pikaAsm = AST_toPikaAsm(ast, buffs);
|
char* pikaAsm = AST_toPikaAsm(ast, buffs);
|
||||||
printf("%s", pikaAsm);
|
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");
|
EXPECT_STREQ(pikaAsm,
|
||||||
|
"2 REF a\n2 REF b\n1 RUN add\n1 REF c\n0 RUN add\n0 OUT d\n");
|
||||||
args_deinit(buffs);
|
args_deinit(buffs);
|
||||||
|
AST_deinit(ast);
|
||||||
EXPECT_EQ(pikaMemNow(), 0);
|
EXPECT_EQ(pikaMemNow(), 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -41,40 +45,39 @@ TEST(parser, method1) {
|
|||||||
char* pikaAsm = AST_toPikaAsm(ast, buffs);
|
char* pikaAsm = AST_toPikaAsm(ast, buffs);
|
||||||
printf("%s", pikaAsm);
|
printf("%s", pikaAsm);
|
||||||
EXPECT_STREQ(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");
|
"2 REF a\n2 REF se.b\n1 RUN b.add\n1 REF pmw.c\n0 RUN "
|
||||||
|
"a.add\n0 OUT d.p\n");
|
||||||
args_deinit(buffs);
|
args_deinit(buffs);
|
||||||
|
AST_deinit(ast);
|
||||||
EXPECT_EQ(pikaMemNow(), 0);
|
EXPECT_EQ(pikaMemNow(), 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
TEST(parser, method2) {
|
TEST(parser, method2) {
|
||||||
AST* ast =
|
char* line = (char*)"d.p = a.add(b.add(a,se.b,diek(pp)) , pmw.c())";
|
||||||
pikaParse((char*)"d.p = a.add(b.add(a,se.b,diek(pp)) , pmw.c())");
|
|
||||||
Args* buffs = New_strBuff();
|
Args* buffs = New_strBuff();
|
||||||
char* pikaAsm = AST_toPikaAsm(ast, buffs);
|
char* pikaAsm = pikaParseToAsm(buffs, line);
|
||||||
printf("%s", pikaAsm);
|
printf("%s", pikaAsm);
|
||||||
EXPECT_STREQ(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");
|
"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");
|
||||||
args_deinit(buffs);
|
args_deinit(buffs);
|
||||||
EXPECT_EQ(pikaMemNow(), 0);
|
EXPECT_EQ(pikaMemNow(), 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
TEST(parser, str1) {
|
TEST(parser, str1) {
|
||||||
AST* ast =
|
char* line = (char*)"literal('2.322')";
|
||||||
pikaParse((char*)"literal('2.322')");
|
|
||||||
Args* buffs = New_strBuff();
|
Args* buffs = New_strBuff();
|
||||||
char* pikaAsm = AST_toPikaAsm(ast, buffs);
|
char* pikaAsm = pikaParseToAsm(buffs, line);
|
||||||
printf("%s", pikaAsm);
|
printf("%s", pikaAsm);
|
||||||
EXPECT_STREQ(pikaAsm,
|
EXPECT_STREQ(pikaAsm, "1 STR 2.322\n0 RUN literal\n");
|
||||||
"1 STR 2.322\n0 RUN literal\n");
|
|
||||||
args_deinit(buffs);
|
args_deinit(buffs);
|
||||||
EXPECT_EQ(pikaMemNow(), 0);
|
EXPECT_EQ(pikaMemNow(), 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
TEST(parser, str2) {
|
TEST(parser, str2) {
|
||||||
AST* ast =
|
char* line = (char*)"b=add(a,literal('1'))";
|
||||||
pikaParse((char*)"b=add(a,literal('1'))");
|
|
||||||
Args* buffs = New_strBuff();
|
Args* buffs = New_strBuff();
|
||||||
char* pikaAsm = AST_toPikaAsm(ast, buffs);
|
char* pikaAsm = pikaParseToAsm(buffs, line);
|
||||||
printf("%s", pikaAsm);
|
printf("%s", pikaAsm);
|
||||||
EXPECT_STREQ(pikaAsm,
|
EXPECT_STREQ(pikaAsm,
|
||||||
"1 REF a\n2 STR 1\n1 RUN literal\n0 RUN add\n0 OUT b\n");
|
"1 REF a\n2 STR 1\n1 RUN literal\n0 RUN add\n0 OUT b\n");
|
||||||
|
@ -125,6 +125,13 @@ exit:
|
|||||||
return ast;
|
return ast;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
char* pikaParseToAsm(Args* buffs, char* line) {
|
||||||
|
AST* ast = pikaParse(line);
|
||||||
|
char* pikaAsm = AST_toPikaAsm(ast, buffs);
|
||||||
|
AST_deinit(ast);
|
||||||
|
return pikaAsm;
|
||||||
|
}
|
||||||
|
|
||||||
char* AST_appandPikaAsm(AST* ast, AST* subAst, Args* buffs, char* pikaAsm) {
|
char* AST_appandPikaAsm(AST* ast, AST* subAst, Args* buffs, char* pikaAsm) {
|
||||||
uint32_t deepth = obj_getInt(ast, "deepth");
|
uint32_t deepth = obj_getInt(ast, "deepth");
|
||||||
while (1) {
|
while (1) {
|
||||||
@ -169,7 +176,6 @@ char* AST_toPikaAsm(AST* ast, Args* buffs) {
|
|||||||
obj_setInt(ast, "deepth", 0);
|
obj_setInt(ast, "deepth", 0);
|
||||||
pikaAsm = AST_appandPikaAsm(ast, ast, runBuffs, pikaAsm);
|
pikaAsm = AST_appandPikaAsm(ast, ast, runBuffs, pikaAsm);
|
||||||
pikaAsm = strsCopy(buffs, pikaAsm);
|
pikaAsm = strsCopy(buffs, pikaAsm);
|
||||||
AST_deinit(ast);
|
|
||||||
args_deinit(runBuffs);
|
args_deinit(runBuffs);
|
||||||
return pikaAsm;
|
return pikaAsm;
|
||||||
}
|
}
|
||||||
|
@ -4,6 +4,7 @@
|
|||||||
|
|
||||||
typedef QueueObj AST;
|
typedef QueueObj AST;
|
||||||
AST* pikaParse(char* line);
|
AST* pikaParse(char* line);
|
||||||
|
char* pikaParseToAsm(Args* buffs, char* line);
|
||||||
int32_t AST_deinit(AST* ast);
|
int32_t AST_deinit(AST* ast);
|
||||||
char* AST_toPikaAsm(AST* ast, Args* buffs);
|
char* AST_toPikaAsm(AST* ast, Args* buffs);
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user