" .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将会出现在本书前言的致谢中。再次感谢您的宝贵意见!