#include <string>
#include <fstream>
using namespace std
int main()
{
ifstream ifile
ifile.open("test.c")里边写你的C文件名就可以了
if (ifile.is_open())
{
string line1,line2
while(!ifile.eof())
{
getline(ifile, line1)
line2 = line2 +"\n" + line1
}
ifile.close()
string::size_type pos = line2.find("float", 0)
if (pos!= line2.npos)
{
line2.replace(pos, 6, "double")
ofstream ofile
ofile.open("test.c")
if (ofile.is_open())
{
ofile<<line2
}
ofile.close()
}
}
return 0
}
yacc/lex在linux下的使用指南链接:http://blog.csdn.net/ruglcc/article/details/7817619
Lex 和 Yacc 是 Unix 和Linux 下词法和语法的分析,解析工具,有了这两个工具,你可以自己制作想要的编译器,也可以重新制作已有程序语言的解析器。需要注意的是linux下的这两个工具生成的程序源码只能是C和C++语言,当然现在早已有类似可以生成Java源码的语法分析器,如较常用的JavaCC(Java Compiler Compiler),相关内容可以去网上搜索。Lex和Yacc已被移植到windows下,现在常用的工具有Parser Generator。本文只介绍Linux 下Lex和Yacc的使用方法。
Lex介绍
Lex 通过对.lex或.l文件定义的格式生成一个C语言源码文件,通过编译这个源码,就生成了.lex文件或.l文件定义的编译器。.lex或.l文件的格式分三段:
1.全局变量声明部分
2.词法规则部分
3.函数定义部分
以下是一个简单的例子:lex_example.l文件
%{//全局声明部分
/*林木100 linux
www.linmu100.com
*/
#include <stdio.h>
extern char *yytext
extern FILE *yyin
int sem_count = 0
%}
//规则定义部分,
%%
[a-zA-Z][a-zA-Z0-9]*{printf("WORD[%s] ", yytext)}
[a-zA-Z0-9\/.-]+printf("FILENAME ")
\" printf("QUOTE ")
\{ printf("OBRACE ")
\} printf("EBRACE ")
{sem_count++printf("SEMICOLON ")}
\n printf("\n")
[ \t]+ /* ignore whitespace */
%%
//以下为函数定义部分
int main(int avgs, char *avgr[])
{
yyin = fopen(avgr[1], "r")
if (!yyin)
{
return 0
}
yylex()
printf("sem_count : %d\n", sem_count)
fclose(yyin)
return 1
}
我查了一下, 感觉是不是你在VC++里一些设置步骤还没做?在安装了Parser Generator后,执行以下步骤,即可使VC++编译和连接由Parser
Generator产生的文件。
1.目录设置
在VC++中执行以下步骤,每个步骤只执行一次。
(1) 选择Tools菜单中的Options命令,在屏幕上即会出现Options对话框。
(2) 选择Directories选项卡。
(3) 在Show Directories for下拉列表框中选择Include Files。
(4) 在Directories框中,点击最后的空目录,并填入Parser Generator的include
子目录的路径。
(5) 在Show Directories for下拉列表框中选择Library Files。
(6) 在Directories框中,点击最后的空目录,并填入Parser Generator的
lib\msdev子目录的路径。
(7) 在Show Directories for下拉列表框中选择Source Files。
(8) 在Directories框中,点击最后的空目录,并填入Parser Generator的Source
子目录的路径。
(9) 点击OK按钮,Options对话框将接受设置并关闭。
VC++在就可以找到包含文件yacc.h和lex.h以及YACC和Lex的库文件。
2.项目设置
对于每个VC++项目,都需在VC++中执行以下步骤:
(1) 选择Project菜单中的Settings命令,在屏幕上即会出现Project Settings对
话框。
(2) 在Settings for下拉列表框中选择Win32 Debug。
(3) 选择C/C++标签。
(4) 在Category下拉列表框中选择General。
(5) 在Preprocessor Definitions框中,在当前文本的最后,输入YYDEBUG。
(6) 选择Link标签。
(7) 在Category下拉列表框中选择General。
(8) 在Object/Library Modules框中,在当前文本的后面,输入yld.lib //这里好象实际使用中不包括后面两个库
ylmtd.lib ylmtdlld.lib。
(9) 在Settings for下拉列表框中选择Win32 Release。
(10) 重复第8步的工作。
(11) 点击OK按钮,Project Settings对话框将接受设置并关闭。
VC++现在可以从特定的库中接受YACC和Lex所需的函数和变量。
3.应用
(1)在Parser Generator下的编辑窗口输入YACC源程序(扩展名必须为.y)。
(2)用Parser Generator下的Project菜单的Compile file命令编译源程序,生成相应的C
语言源程序(.cpp)。
(3)用VC++编译,连接C语言源程序,生成可执行程序(.exe)后即可执行。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)