- 论坛徽章:
- 0
|
排错:lex yacc ?
- lex可以说是词法分析器生成程序,yacc是语法的
复制代码
谢谢!
我也做了个解析器,包括语法和句法,类似c的,感觉用起来比较简单。
下面是个句法解析的例子:
- #include <cline.h>;
- #include <stdio.h>;
- int user_func_iadd(int a,int b)
- {
- return a+b;
- };
- double user_func_fadd(double a,double b)
- {
- return a+b;
- };
- TParaMgr Para;
- TLine Line;
- int Exam_Run_Line(char * line)
- {
- char s_res[200];
- printf("expression is: %s \n",line);
- Line.Run_Line(line,s_res);
- if(Line.HaveError())
- {
- printf("\nline err :'%s'\n",Line.GetErrorMsg());
- return 0;
- };
- printf("run result is: %s\n\n",s_res);
- return 1;
- };
- int main()
- {
- int i_res;
- float f_res;
- char s_res[200];
- char express[100];
- printf("\n\n");
- puts(" *****************************************************************");
- puts(" * this orient c++ lib csp module demo *");
- puts(" * [www.onlyit.cn] mengwg 2003 *");
- puts(" *****************************************************************");
-
- Define_Modu("iadd","II",(char *)&user_func_iadd,'I');
- Define_Modu("fadd","FF",(char *)&user_func_fadd,'D');
- Line.SetParaMgr(&Para);
- Para.PushPara("x",100.23);
- Para.PushPara("y",200);
- Exam_Run_Line("x");
- Exam_Run_Line("y");
- Exam_Run_Line("1+2");
- Exam_Run_Line("1+2*3.2");
- Exam_Run_Line("x+y*2-6.5+y");
- Exam_Run_Line("x+y-iadd(10.2,y)");
- Exam_Run_Line("x+y+iadd(10.2,y)*2+x");
- Exam_Run_Line("x+iadd(3,iadd(3,2))*2+10");
- Exam_Run_Line("x>;100&&y==200");
- Exam_Run_Line("x<100");
- Exam_Run_Line("x=80");
- Exam_Run_Line("x<100");
- strcpy(express,"x+y");
- printf("result type of %s is %c\n\n",express,Line.Get_Line_Type(express));
- strcpy(express,"iadd(x+y,3.2)");
- printf("result type of %s is %c\n\n",express,Line.Get_Line_Type(express));
- getchar();
- return 1;
- }
复制代码
result:
- *****************************************************************
- * this orient c++ lib csp module demo *
- * [www.onlyit.cn] mengwg 2003 *
- *****************************************************************
- expression is: x
- run result is: 100.230003
- expression is: y
- run result is: 200
- expression is: 1+2
- run result is: 3
- expression is: 1+2*3.2
- run result is: 7.400000
- expression is: x+y*2-6.5+y
- run result is: 693.729980
- expression is: x+y-iadd(10.2,y)
- run result is: 90.230011
- expression is: x+y+iadd(10.2,y)*2+x
- run result is: 820.459961
- expression is: x+iadd(3,iadd(3,2))*2+10
- run result is: 126.230003
- expression is: x>;100&&y==200
- run result is: 1
- expression is: x<100
- run result is: 0
- expression is: x=80
- run result is: 80.000000
- expression is: x<100
- run result is: 1
- result type of x+y is F
- result type of iadd(x+y,3.2) is I
复制代码 |
|