本篇文章给大家谈谈用lexc语言编译器,以及lex编程对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。
本文目录一览:
1、linux 下怎样安装使用 Yacc 和 Lex2、lex bot如何用3、c语言用什么编译器4、用正则式描述C语言的各种词型,借助LEX工具实现C语言的词法分析器。 请详细回答相关思考题: 越详细越好。
linux 下怎样安装使用 Yacc 和 Lex
yacc/lex在linux下的使用指南
链接:
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
*/
#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;
}
lex bot如何用
lexbot如何用如下
Lex的基本工作原理为:由正规式生成NFA,将NFA变换成DFA,DFA经化简后,模拟生成词法分析器。
其中正规式由开发者使用Lex语言编写,其余部分由Lex翻译器完成.翻译器将Lex源程序翻译成一个名为lex.yy.c的C语言源文件,此文件含有两部分内容:一部分是根据正规式所构造的DFA状态转移表,另一部分是用来驱动该表的总控程序yylex()。当主程序需要从输入字符流中识别一个记号时,只需要调用一次yylex()就可以了。为了使用Lex所生成的词法分析器,我们需要将lex.yy.c程序用C编译器进行编译,并将相关支持库函数连入目标代码
Lex源程序必须按照Lex语言的规范来写,其核心是一组词法规则(正规式)。一般而言,一个Lex源程序分为三部分,三部分之间以符号%%分隔。[第一部分:定义段]%%第二部分:词法规则段[%%第三部分:辅助函数段]
其中,第一部分及第三部分和第三部分之上的%%都可以省略(即上述方括号括起的部分可以省略)。以%开头的符号和关键字,或者是词法规则段的各个规则一般顶着行首来写,前面没有空格。
c语言用什么编译器
; c语言可以用的编译器有很多,包括MicrosoftVisualC++、MyEclipse、TurboC和gcc编译器等。
1、MicrosoftVisualC++是微软公司的免费C语言编程软件,是用户在安装VisualC++库时必须安装的运行时组件,可以完美解决在系统运行一些软件时会遇到缺少DLL的情况,使用户可正常运行VisualC++开发的应用程序。
2、myeclipse是款优秀的JAVA开发工具,MyEclipse功能强大,运用广泛,尤其是对各种开源产品的支持十分不错,能够大大提高开发人员的工作效率。
3、TurboC是一款功能快捷高效的C语言编辑器,主要是用来编写C/C++程序,无需独立地编辑、编译和连接程序就能建立并运行C语言程序,软件体积非常的小巧,并且对于电脑方面没有特别的系统要求,功能上也十分的强大。
4、gcc编译器是款专业的c语言编辑工具,可用于c语言、c++、java、object-C等语言程序中去,支持交叉编译器,交叉语言设计,提供交叉编译环境,通过在命令列下键入一些命令参数,让编程更有效率。
总结
c语言可以用的编译器有很多,包括MicrosoftVisualC++、MyEclipse、TurboC和gcc编译器等。
用正则式描述C语言的各种词型,借助LEX工具实现C语言的词法分析器。 请详细回答相关思考题: 越详细越好。
1.输入是代码文件,输出是一个个的token。这些输出之后是供语法分析器(yacc,bison什么的)用的。
2.做准备的话你可以看看《c专家编程》第3章:分析c语言的声明。这个例子是一个最简单的词法+语法分析器,足够给你一些提示了。当然这还不够,你可能要找一份C语言的标准来看。
3.归类无非是修饰符、类型、关键字、标识符、运算符等等了。
4.在2的基础上。不难解决。
5.这个很简单。就算直接文件处理也解决掉了。依稀记得lex可能更容易做这件事儿。
总体来说,这事儿如果自己做可能比较费劲,用lex应该省事不少。
=========================================================================
上面只是凭印象说的,希望对你有帮助。等等看有没有大牛帮你完成吧。或者等我有空咱们一起研究下。
关于用lexc语言编译器和lex编程的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。