Windows下用yacc生成计算器c++程序
来源:互联网 发布:有哪些java源码网站 编辑:程序博客网 时间:2024/06/07 04:47
上篇介绍了c的yacc计算器程序, 那不行,c++有那么多库,stl什么的,能用c++更好,好开始动手。
首先我将原先生成的*.c都改成了*.cpp,编译,发现报如下错:
(本来我是把报错信息都copy下来的,无奈写到一半IE崩溃,我没保存,泪)
大致是 unistd.h 没找到。
这个查了一下,可以如下解决,找到vs2008的vc include目录,在文件夹下创建个unistd.h文件,输入如下内容:
#if _MSC_VER > 1000#pragma once#endif#ifndef _INC_UNISTD#define _INC_UNISTD#include <io.h>#include <process.h>#endif
然后再编译,就不存在此问题了,这是编译报yywrap等得错,这个一看应该明白,是由于c++编译时会将函数编译为一个只有编译器认识的函数,(c++为了实现虚函数),那么因为yywrap等类似的函数实际是c的代码, 那么我们要强制告诉c++,这些个函数给我留着,就叫这名,于是extern "C"配上用场了。话不多说了,上代码
frame.l
%{
#include <string>
#include "frame.tab.h"
extern "C" {
int yywrap(void);
void yyerror(char *);
}
%}
%%
[a-z] {yylval=*yytext-'a';return VARIABLE; }
[0-9]+ { yylval=atoi(yytext);return NUMBER;}
[-+=()/*\n] {return *yytext;}
[\t ]
. {yyerror("invalid char\n");}
%%
int yywrap(void)
{
return 1;
}
frame.y
%{#include <iostream>
extern "C" {
void yyerror(const char *s);
}
extern FILE *yyin;
int yylex(void);
int sym[26];
%}
%token NUMBER VARIABLE
%%
program:
| program statment '\n';
statment: expr { std::cout<<"expr="<<$1<<std::endl;}
|VARIABLE'='expr{ sym[$1]=$3; std::cout<< sym[$1];}
;
expr:expr '+' term{$$=$1+$3;}
|expr '-' term{$$=$1-$3;}
|term {$$=$1;}
;
term:
term '*' factor {$$=$1*$3;}
|term '/' factor{$$=$1/$3;}
|factor {$$=$1;}
;
factor:
NUMBER {$$=$1;}
| '(' expr ')' {$$=$2;}
|VARIABLE {$$=sym[$1];}
;
%%
void yyerror(const char *s)
{
printf("err:%s\n",s);
}
int main()
{
do{
yyparse();
}while(!feof(yyin));
return 0;
}
顺便说几句,要特别注意frame.l 中 %% 和下面[a-z] 这中间不能有除了回车外其他的空格,否则会出错,莫名其妙的。
- Windows下用yacc生成计算器c++程序
- windows 下写yacc程序的经典计算器例子
- windows下表达式计算器C实现
- 用lex和yacc实现的计算器
- Lex与Yacc学习(六)之lex & yacc (简单计算器程序) 运行
- yacc/lex windows 下 Parser Generator 使用指南
- Windows 7下配置Lex和Yacc
- Windows下使用Lex和Yacc
- Windows下lex 与 yacc的使用
- Lex&yacc简单计算器
- lex/yacc实现计算器
- windows c 计算器
- windows下运行C程序
- 用Lex(flex)和yacc(bison)写的简单计算器
- windows下cx_Freeze生成Python可执行程序
- windows下生成Python可执行程序
- Windows下使用MATLAB的MCC命令生成C/C++程序
- Windows计算器程序的总结
- 程序员有趣的面试智力题
- Birt报表开发
- Cpufreq
- mysql中知识点补充
- 软件生存期模型介绍
- Windows下用yacc生成计算器c++程序
- POJ 3083 Children of the Candy Corn dfs+bfs
- HDOJ N皇后问题
- jsp通过Cookie实现自动登录
- 内存中数据的存储方式
- poj 3084 zoj2788 边联通度,最大流
- Convert Date from util to sql
- 2012华为校园招聘机试(成都)-2
- Fetchmail使用简介