1、Lex作为名词表示(拉丁)法律、罗马公法(或私法)。Lex作为人名是指(德、匈)莱克斯。
2、Lex是LEXical compiler的缩写,是Unix环境下非常著名的工具,主要功能是生成一个词法分析器(scanner)的C源码,描述规则采用正则表达式(regular expression)。
.lex文件是Lex
的扫描器。它在
Lex
程序中如下表示:
$
lex
<file
name.lex>
这生成了
lex.yy.c
文件,它可以用
C
编译器来进行编译。它还可以用解析器来生成可执行程序,或者在链接步骤中通过选项
?ll
包含
Lex
库。
祝你好运^_^
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
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)