编一个lex程序,拷贝一个c程序,并将程序中关键字float的每个实例替换成double

编一个lex程序,拷贝一个c程序,并将程序中关键字float的每个实例替换成double,第1张

你用字符串替换不就可以了吗?

#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)后即可执行。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/11903452.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-19
下一篇 2023-05-19

发表评论

登录后才能评论

评论列表(0条)

保存