" .ahm.rg ql,e)-n)-b)-glxo`qrdq x`bb,cKk`mft`fd-x kdw,kKk`mft`fd-k fbb,nlxo`qrdqkdw-xx-bx-s`a-b dwhs/
%{ #include "y.tab.h" #include "../../../som/core/types.h" #include <stdio.h> #include <string.h> extern uint8* yylval; extern uint16 tmpLine; %} digit [0-9] number (digit)+ letter [a-zA-Z] newline \n whitespace [" "\t]+ %% "while" return WHILE; "if" return IF; [a-zA-Z]+ { yylval = strdup(yytext); return VARIABLE; } [0-9]+ { yylval = strdup(yytext); return INTEGER; } '[a-zA-Z0-9]+' { yylval = strdup(yytext); return STRING; } ">=" return GE; "<=" return LE; "==" return EQ; "!=" return NE; [-+=;] { return *yytext; } "print""('"[A-Za-z0-9" "]+"')"/\n { yylval = strdup(yytext); return PRINT; } "print""("[A-Za-z]+")"/\n { yylval = strdup(yytext); return PRINT; } [0-9]+";"/\n { yylval = strdup(yytext); return FORM; } [<>+@]/\n { yylval = strdup(yytext); return SOFT_KEY; } "["([0-9A-Za-z])*/\n { yylval = strdup(yytext); return SOFT_KEY; } "]"([0-9A-Za-z])*/\n { yylval = strdup(yytext); return SOFT_KEY; } "$""["([0-9A-Za-z])+/\n { yylval = strdup(yytext); return CHECK_SOFT_KEY; } "$""]"([0-9A-Za-z])+/\n { yylval = strdup(yytext); return CHECK_SOFT_KEY; } ~((!){0,1})([0-9A-Za-z:])+/\n { yylval = strdup(yytext); return CHECK_POINT; } %[0-9]+"."/\n { yylval = strdup(yytext); return EXTERNAL_COMMAND; } %[0-9]+(..)+/\n { yylval = strdup(yytext); return EXTERNAL_COMMAND; } f[0-9]+/\n { yylval = strdup(yytext); return HOT_KEY; } "^"((!){0,1})"."[ERYGFULS]+"."/\n { yylval = strdup(yytext); return CHECK_LED_TONE; } [{}()] { printf("$$$$$$$$$$$$line = %d\n", yylineno); return *yytext; } "/*"[A-Za-z0-9" "#]+"*/"/\n { yylval = strdup(yytext); return COMMENT; } \n { return ENTER; } [" "\t]+ ; . { yyerror(yytext); } %% int yywrap() { return 1; }
%{ #include <stdio.h> #include "../../../som/core/types.h" #include "../def.h" typedef uint8* string; #define YYSTYPE string uint16 checkPointNum; uint16 counter; extern int yylineno; uint8 sequence[1024][256]; uint16 line[1024]; uint16 tmpLine; %} %token FORM SOFT_KEY CHECK_SOFT_KEY MENU_REFRESH CHECK_POINT EXTERNAL_COMMAND HOT_KEY CHECK_LED_TONE %token COMMENT ENTER %token IF WHILE EXPR %token PRINT %token GE LE EQ NE %token VARIABLE STRING INTEGER %% program: program script {} | ; script: stmt { //line[yylineno] = tmpLine; tmpLine = yylineno; printf("tmpline = %d yylineno = %d\n", tmpLine, yylineno); } |while_stmt { //line[yylineno] = tmpLine; tmpLine = yylineno; //printf("line = %d\n", tmpLine); printf("tmpline = %d yylineno = %d\n", tmpLine, yylineno); } |if_stmt { //line[yylineno] = tmpLine; tmpLine = yylineno; //printf("line = %d\n", tmpLine); printf("tmpline = %d yylineno = %d\n", tmpLine, yylineno); } ; while_stmt: WHILE"("expr")"while_stmt { printf("**********while Line=%d\n", yylineno);//line[yylineno] = tmpLine; tmpLine = yylineno; printf("tmpline = %d yylineno = %d\n", tmpLine, yylineno); } |WHILE"("expr")"stmt { printf("**********while Line=%d\n", yylineno);//line[yylineno] = tmpLine; tmpLine = yylineno; printf("tmpline = %d yylineno = %d\n", tmpLine, yylineno); //printf("line = %d\n", yylineno); } ; if_stmt: IF"("expr")"if_stmt { printf("#################if Line=%d\n", yylineno);//line[yylineno] = tmpLine; tmpLine = yylineno; printf("tmpline = %d yylineno = %d\n", tmpLine, yylineno); //printf("line = %d\n", yylineno); } |IF"("expr")"stmt { printf("#################if Line=%d\n", yylineno);//line[yylineno] = tmpLine; tmpLine = yylineno; printf("tmpline = %d yylineno = %d\n", tmpLine, yylineno); //printf("line = %d\n", yylineno); } ; expr: VARIABLE GE INTEGER |VARIABLE LE INTEGER |VARIABLE EQ INTEGER |VARIABLE NE INTEGER |VARIABLE EQ STRING |VARIABLE NE STRING ;
stmt: FORM { printf("Form is %s %d\n", $1, yylineno);//line[yylineno] = tmpLine; tmpLine = yylineno; printf("tmpline = %d yylineno = %d\n", tmpLine, yylineno); //printf("line = %d\n", yylineno); } |SOFT_KEY{ printf("tmpline = %d yylineno = %d\n", tmpLine, yylineno); printf("Soft key is %s\n", $1);//line[yylineno] = tmpLine; tmpLine = yylineno; //printf("line = %d\n", yylineno); } |CHECK_SOFT_KEY{ checkPointNum++; printf("tmpline = %d yylineno = %d\n", tmpLine, yylineno); printf("Check soft key is %s\n", $1);//line[yylineno] = tmpLine; tmpLine = yylineno; //printf("line = %d\n", yylineno); } |CHECK_POINT { checkPointNum++; printf("tmpline = %d yylineno = %d\n", tmpLine, yylineno); printf("Check point is %s\n", $1);//line[yylineno] = tmpLine; tmpLine = yylineno; //printf("line = %d\n", yylineno); } |EXTERNAL_COMMAND { printf("tmpline = %d yylineno = %d\n", tmpLine, yylineno); printf("External command is %s\n", $1);//line[yylineno] = tmpLine; tmpLine = yylineno; //printf("line = %d\n", yylineno); } |HOT_KEY { printf("tmpline = %d yylineno = %d\n", tmpLine, yylineno); printf("Hot key = %s\n", $1);//line[yylineno] = tmpLine; tmpLine = yylineno; //printf("line = %d\n", yylineno); } |CHECK_LED_TONE { printf("tmpline = %d yylineno = %d\n", tmpLine, yylineno); printf("Check led and tone = %s\n", $1);//line[yylineno] = tmpLine; tmpLine = yylineno; //printf("line = %d\n", yylineno); checkPointNum++; } |COMMENT { printf("tmpline = %d yylineno = %d\n", tmpLine, yylineno); printf("comment is %s\n", $1);//line[yylineno] = tmpLine; tmpLine = yylineno; //printf("line = %d\n", yylineno); } |ENTER { tmpLine++; printf("tmpline = %d yylineno = %d\n", tmpLine, yylineno); counter++; //line[yylineno] = tmpLine; tmpLine = yylineno; //printf("line = %d\n", yylineno); } |PRINT { printf("tmpline = %d yylineno = %d\n", tmpLine, yylineno); printf("print %s\n", $1);//line[yylineno] = tmpLine; tmpLine = yylineno; //printf("line = %d\n", yylineno); }
#include <stdio.h> void to_binary(int num){ if(num == 0){ return ; }else{ int mod = num % 2; int res = num / 2; to_binary(res); putchar('0'+mod); } } int main(void){ to_binary(13); printf("\n"); return 0; }
如果您有建设性意见,哪怕只是纠正一个错别字,也请不吝赐教,您留下的姓名和email将会出现在本书前言的致谢中。再次感谢您的宝贵意见!