📄 cmdlex.l
字号:
%{#include "cmdlexcl.h"#include "cmdpars.h"static YY_cl_ucsim_parser_STYPE *yylval;int yywrap(void);#define tok(x) (YY_cl_ucsim_parser_CLASS::x)#define lexer_obj (dynamic_cast<class cl_ucsim_lexer *>(this))%}%%[ \t]* ;"+" return(tok(PTOK_PLUS));"-" return(tok(PTOK_MINUS));"*" return(tok(PTOK_ASTERIX));"/" return(tok(PTOK_SLASH));"(" return(tok(PTOK_LEFT_PAREN));")" return(tok(PTOK_RIGHT_PAREN));"[" return(tok(PTOK_LEFT_BRACKET));"]" return(tok(PTOK_RIGHT_BRACKET));"=" return(tok(PTOK_EQUAL));"." return(tok(PTOK_DOT));"&" return(tok(PTOK_AMPERSAND));([0-9]+)|(0x[0-9a-fA-F]+) { yylval->number= strtol(yytext, 0, 0); return(YY_cl_ucsim_parser_CLASS::PTOK_NUMBER);}[a-zA-Z_][0-9a-zA-Z_]* return(lexer_obj->check_id(yytext));. ;%%#undef lexer_objintyywrap(void){ return(1);}#include "cmdlexcl.h"#include "globals.h"intcl_ucsim_lexer::LexerInput(char *buf, int max_size){ if (!string_to_parse) return(yyFlexLexer::LexerInput(buf, max_size)); int lrem= strlen(string_ptr); int n= max_size; if (lrem < max_size) n= lrem; strncpy(buf, string_ptr, n); string_ptr+= n; return(n);}voidcl_ucsim_lexer::activate_lexer_to_parse_into(void *yylv){ yylval= (YY_cl_ucsim_parser_STYPE *)yylv;}intcl_ucsim_lexer::check_id(char *token){ class cl_uc *uc= application->get_uc(); //printf("checking id=\"%s\"\n",token); if (uc) { class cl_memory *mem= uc->memory(token); if (mem) { yylval->memory_object= mem; return(tok(PTOK_MEMORY_OBJECT)); } t_addr addr; bool found= uc->symbol2address(yytext, uc->sfr_tbl(), &addr); if (found) { /*yylval->number= addr; return(tok(PTOK_NUMBER));*/ yylval->memory.memory= uc->address_space(MEM_SFR_ID); yylval->memory.address= addr; return(tok(PTOK_MEMORY)); } found= uc->symbol2address(yytext, uc->bit_tbl(), &addr); if (found) { t_addr memaddr; t_mem mask; yylval->bit.memory= uc->bit2mem(addr, &memaddr, &mask); yylval->bit.mem_address= memaddr; yylval->bit.bit_address= addr; yylval->bit.mask= mask; return(tok(PTOK_BIT)); } } return(0);}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -