mirror of
https://gitee.com/Lyon1998/pikapython.git
synced 2025-02-05 17:28:23 +08:00
use lexer_forEachToken in parser
This commit is contained in:
parent
0e2da7bd28
commit
d8f35fea36
@ -165,16 +165,12 @@ static enum StmtType Lexer_matchStmtType(char* right) {
|
|||||||
enum StmtType stmtType = STMT_none;
|
enum StmtType stmtType = STMT_none;
|
||||||
char* rightWithoutSubStmt = strsDeleteBetween(&buffs, right, '(', ')');
|
char* rightWithoutSubStmt = strsDeleteBetween(&buffs, right, '(', ')');
|
||||||
|
|
||||||
struct ParserState ps;
|
|
||||||
ParserState_init(&ps);
|
|
||||||
ParserState_parse(&ps, rightWithoutSubStmt);
|
|
||||||
|
|
||||||
uint8_t is_get_operator = 0;
|
uint8_t is_get_operator = 0;
|
||||||
uint8_t is_get_method = 0;
|
uint8_t is_get_method = 0;
|
||||||
uint8_t is_get_string = 0;
|
uint8_t is_get_string = 0;
|
||||||
uint8_t is_get_number = 0;
|
uint8_t is_get_number = 0;
|
||||||
uint8_t is_get_symbol = 0;
|
uint8_t is_get_symbol = 0;
|
||||||
ParserState_forEach(ps) {
|
Lexer_forEachToken(ps, rightWithoutSubStmt) {
|
||||||
ParserState_iterStart(&ps);
|
ParserState_iterStart(&ps);
|
||||||
/* collect type */
|
/* collect type */
|
||||||
if (ps.token1.type == TOKEN_operator) {
|
if (ps.token1.type == TOKEN_operator) {
|
||||||
@ -651,18 +647,15 @@ char* Parser_solveBranckets(Args* outBuffs,
|
|||||||
Arg* right_arg = arg_setStr(NULL, "", "");
|
Arg* right_arg = arg_setStr(NULL, "", "");
|
||||||
uint8_t is_in_brancket = 0;
|
uint8_t is_in_brancket = 0;
|
||||||
args_setStr(&buffs, "index", "");
|
args_setStr(&buffs, "index", "");
|
||||||
/* init parserState */
|
|
||||||
struct ParserState ps;
|
|
||||||
ParserState_init(&ps);
|
|
||||||
/* exit when NULL */
|
/* exit when NULL */
|
||||||
if (NULL == content) {
|
if (NULL == content) {
|
||||||
arg_deinit(right_arg);
|
arg_deinit(right_arg);
|
||||||
right_arg = arg_setStr(right_arg, "", stmt);
|
right_arg = arg_setStr(right_arg, "", stmt);
|
||||||
goto exit;
|
goto exit;
|
||||||
}
|
}
|
||||||
ParserState_parse(&ps, content);
|
char* tokens = Lexer_getTokens(&buffs, content);
|
||||||
/* exit when no '[' ']' */
|
/* exit when no '[' ']' */
|
||||||
if (!Lexer_isContain(ps.tokens, TOKEN_devider, "[")) {
|
if (!Lexer_isContain(tokens, TOKEN_devider, "[")) {
|
||||||
/* not contain '[', return origin */
|
/* not contain '[', return origin */
|
||||||
arg_deinit(right_arg);
|
arg_deinit(right_arg);
|
||||||
if (strEqu(mode, "right")) {
|
if (strEqu(mode, "right")) {
|
||||||
@ -672,7 +665,7 @@ char* Parser_solveBranckets(Args* outBuffs,
|
|||||||
}
|
}
|
||||||
goto exit;
|
goto exit;
|
||||||
}
|
}
|
||||||
ParserState_forEach(ps) {
|
Lexer_forEachToken(ps, content) {
|
||||||
ParserState_iterStart(&ps);
|
ParserState_iterStart(&ps);
|
||||||
/* matched [] */
|
/* matched [] */
|
||||||
/* found '[' */
|
/* found '[' */
|
||||||
@ -726,11 +719,10 @@ char* Parser_solveBranckets(Args* outBuffs,
|
|||||||
}
|
}
|
||||||
ParserState_iterEnd(&ps);
|
ParserState_iterEnd(&ps);
|
||||||
}
|
}
|
||||||
|
ParserState_deinit(&ps);
|
||||||
exit:
|
exit:
|
||||||
/* clean and return */
|
/* clean and return */
|
||||||
content = strsCopy(outBuffs, arg_getStr(right_arg));
|
content = strsCopy(outBuffs, arg_getStr(right_arg));
|
||||||
ParserState_deinit(&ps);
|
|
||||||
arg_deinit(right_arg);
|
arg_deinit(right_arg);
|
||||||
strsDeinit(&buffs);
|
strsDeinit(&buffs);
|
||||||
return content;
|
return content;
|
||||||
@ -885,16 +877,12 @@ AST* AST_parseStmt(AST* ast, char* stmt) {
|
|||||||
char* subStmts = strsCut(&buffs, right, '(', ')');
|
char* subStmts = strsCut(&buffs, right, '(', ')');
|
||||||
/* add ',' at the end */
|
/* add ',' at the end */
|
||||||
subStmts = strsAppend(&buffs, subStmts, ",");
|
subStmts = strsAppend(&buffs, subStmts, ",");
|
||||||
struct ParserState ps;
|
|
||||||
/* init parserStage */
|
|
||||||
ParserState_init(&ps);
|
|
||||||
ParserState_parse(&ps, subStmts);
|
|
||||||
/* init process values */
|
/* init process values */
|
||||||
Arg* subStmt = arg_setStr(NULL, "", "");
|
Arg* subStmt = arg_setStr(NULL, "", "");
|
||||||
uint8_t is_in_brankets = 0;
|
uint8_t is_in_brankets = 0;
|
||||||
/* start iteration */
|
/* start iteration */
|
||||||
char* subStmt_str = NULL;
|
char* subStmt_str = NULL;
|
||||||
ParserState_forEach(ps) {
|
Lexer_forEachToken(ps, subStmts) {
|
||||||
ParserState_iterStart(&ps);
|
ParserState_iterStart(&ps);
|
||||||
/* parse process */
|
/* parse process */
|
||||||
if (strEqu(ps.token1.pyload, "(")) {
|
if (strEqu(ps.token1.pyload, "(")) {
|
||||||
|
@ -79,8 +79,14 @@ ByteCodeFrame* byteCodeFrame_appendFromAsm(ByteCodeFrame* bf, char* pikaAsm);
|
|||||||
int bytecodeFrame_fromMultiLine(ByteCodeFrame* bytecode_frame,
|
int bytecodeFrame_fromMultiLine(ByteCodeFrame* bytecode_frame,
|
||||||
char* python_lines);
|
char* python_lines);
|
||||||
void Parser_compilePyToBytecodeArray(char* lines);
|
void Parser_compilePyToBytecodeArray(char* lines);
|
||||||
#define ParserState_forEach(ps) \
|
#define ParserState_forEach(parseState) \
|
||||||
ParserState_beforeIter(&ps); \
|
ParserState_beforeIter(&parseState); \
|
||||||
for (int i = 0; i < ps.length; i++)
|
for (int i = 0; i < parseState.length; i++)
|
||||||
|
|
||||||
|
#define Lexer_forEachToken(parseState, tokens) \
|
||||||
|
struct ParserState ps; \
|
||||||
|
/* init parserStage */ \
|
||||||
|
ParserState_init(&parseState); \
|
||||||
|
ParserState_parse(&parseState, tokens); \
|
||||||
|
ParserState_forEach(parseState)
|
||||||
#endif
|
#endif
|
||||||
|
Loading…
x
Reference in New Issue
Block a user