`
sillycat
  • 浏览: 2551709 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

Compiler Principle(1)Lex and Yacc

阅读更多

Compiler Principle(1)Lex and Yacc

1. Some Concept
Abstract Syntax Tree AST
Lex - Lexical Analyzer
Yacc - Yet Another Compiler Compiler

2. Lex
>lex --version
flex 2.5.35 Apple(flex-31)

Declare the wordCount
%{       

int wordCount = 0;

%}

chars [A-za-z\_\'\.\"]

numbers ([0-9])+

delim [" "\n\t]

whitespace {delim}+

words {chars}+

%%

Lex Rules
{words} {        

 wordCount++;

 /*        increase the word count by one*/ }

{whitespace}

 { /* do nothing*/ }

{numbers}

{ /* one may want to add some processing here*/ }

%%

The last part is usually, the main Function
void main()

{  

yylex();

/* start the analysis*/  

printf(" No. of words:%d\n", wordCount);

}

 

int yywrap(){  

 return 1;

}

3. Yacc
>yacc -V
bison (GNU Bison) 2.3 Written by Robert Corbett and Richard Stallman.

>yacc filename.y

Declaration
%{
 #typedef char* string; /* to specify token types as char* */
#define YYSTYPE string /*a Yacc variable which has the value of returned token */
%}
%token NAME EQ AGE
%%

Grammar Rules
file: record file
     | record ;
record: NAME EQ AGE {
     printf(“%s is now %s years old!, $1, $3);
};
%%

C Function
void main(){
     yyparse();
}
int yyerror(char* msg){
     printf(“Error: %s encountered \n”, msg);
}

>yacc -d filename.y

4. Lex and Yacc
Take the example in 
http://www.ualberta.ca/dept/chemeng/AIX-43/share/man/info/C/a_doc_lib/aixprggd/genprogc/ie_prog_4lex_yacc.htm 

I need more time to understand more.

References:
java AST
http://rwl6813021.iteye.com/blog/174666
http://lym6520.iteye.com/blog/747840

go AST
http://golang.org/src/pkg/go/ast/example_test.go
https://github.com/Joinhack/peony/blob/master/mole/gowalker.go
https://github.com/Joinhack/peony/blob/master/mole/comment_expr.y
https://github.com/Joinhack/peony/blob/master/mole/gowalker.go

Yacc
http://www.ibm.com/developerworks/cn/linux/sdk/lex/
http://blog.csdn.net/yuucyf/article/details/7108590
http://www.360doc.com/content/12/0806/19/532901_228697197.shtml

Yacc and Lex
http://epaperpress.com/lexandyacc/
http://www.ualberta.ca/dept/chemeng/AIX-43/share/man/info/C/a_doc_lib/aixprggd/genprogc/ie_prog_4lex_yacc.htm 

分享到:
评论

相关推荐

    Lex和Yacc入门(A COMPACT GUIDE TO Lex&Yacc)含源码

    The introduction describes the basic building blocks of a compiler and explains the interaction between lex and yacc. The next two sections describe lex and yacc in more detail. With this background ...

    Lex与Yacc第二版高清版

    《Lex与Yacc第二版高清版》是一本深入解析Lex和Yacc的权威书籍,适合对编译原理、解析器构造或语言设计感兴趣的读者。这本书的扫描版清晰度高,包含完整的目录,方便读者快速定位所需内容。标签“Lex Flex Yacc”...

    利用LEX,YACC实现SQL编译器

    **YACC(Yet Another Compiler Compiler)**:YACC是一种语法分析器生成器,能够识别更高级别的语法结构。它基于上下文无关文法(Context-Free Grammar,CFG),能够处理复杂的嵌套结构,例如括号的平衡性检查。在...

    Lex和Yacc简明教程

    《Lex和Yacc简明教程》是一份深入探讨编译器构造工具的宝贵资源,主要关注于Lex和Yacc这两个经典工具。它们在计算机科学领域,尤其是编译器设计和实现中扮演着至关重要的角色。本文将详尽阐述这两个工具的基本概念、...

    lex_yacc清晰版.zip

    YACC是“Yet Another Compiler-Compiler”的缩写,它是一个语法分析器生成器。YACC接收一个包含语法规则和动作的文件,生成C代码来执行这些规则,进行语法分析。这个过程涉及解析输入的词法单元,构建抽象语法树,并...

    lex&yacc语言解析

    Yacc,全称Yet Another Compiler-Compiler,是另一个关键工具,用于生成语法分析器。Yacc文件通常包含语法规则和动作,定义了语言的句法结构。Yacc规格文件中,语法规则以Bison(Yacc的现代版本)的语法描述,如“%...

    基于lex和yacc的词法分析器+语法分析器(C语言编译器)【100012624】

    项目文件“compiler_lex-yacc”可能包含了 lex 规则文件(如 lexer.l 或 lexer.ll)和 yacc 规则文件(如 parser.y 或 parser.yy),以及生成的 C 代码文件(如 lexer.c 和 parser.c)和其他支持文件。编译这些文件...

    《LEX与YACC》中文第二版

    压缩包中的"lex and yacc.chm"可能是LEX和YACC的详细参考手册,以CHM(Compiled HTML Help)格式提供,这种格式便于离线查阅和搜索。"lex与yacc.pdf"可能是书籍的电子版,包含了更深入的理论和实践指导。"红黑软件...

    Lex和Yacc的相关文档

    **Yacc**(Yet Another Compiler Compiler)则是一个用于生成语法分析器的工具,负责根据语法规则构建抽象语法树。这两个工具通常配合使用,以实现复杂文本的解析。 #### 三、环境配置篇 - **必备工具:** - **Lex...

    lex和yacc学习资料

    1. 学习如何编写lex和yacc/flex和bison的规范文件,定义词法和语法规则。 2. 掌握词法分析和语法分析的基本概念。 3. 理解编译器构造的核心原理,包括词法分析、语法分析、错误处理和符号表管理。 4. 实践编写简单的...

    《Lex与Yacc》中文第二版带源码

    接着,我们来看Yacc,全称Yet Another Compiler-Compiler。Yacc是一种语法分析器生成器,它用于处理编译器设计中的语法分析阶段。在这个阶段,编译器根据语法规则解析词法单元流,构建抽象语法树(AST)。Yacc需要...

    使用Lex, Yacc开发的算术表达式解析器,以及算术表达式的计算器

    接着,Yacc(Yet Another Compiler-Compiler)是一个语法分析器生成器,它根据一套语法规则(通常以巴科斯范式或扩展巴科斯范式表示)来解析由Lex生成的tokens,构建抽象语法树(AST),并执行必要的计算。...

    lex_yacc_win.zip(Windows下的编译器生成系统)

    1. release.doc:这是关于lex和yacc在Windows环境下的发布文档,可能包含安装指南、版本信息以及系统要求等,对于初次使用者来说是重要的参考资源。 2. logo.gif:可能是lex_yacc的项目标识,有助于用户识别和建立...

    借助Lex和Yacc进行词法语法分析

    **Yacc**(Yet Another Compiler Compiler)则是一款语法分析器生成器,它依据上下文无关文法(CFG)解析输入流,识别出语句和表达式的结构。Yacc能够处理复杂的文法规则,自动构建语法树,从而为后续的语义分析、...

    lex_yacc简明教程

    **Yacc**(Yet Another Compiler Compiler)是一种自动生成语法分析器的工具,主要用于编译器的开发。它的GNU版本称为**Bison**。Yacc允许用户定义一种语言的语法,并据此生成一个解析器,该解析器可以解析符合该语法...

    Windows的lex&yacc编译器

    接下来,我们来看看Yacc,即Yet Another Compiler-Compiler,现在通常称为Bison。Bison是一个用于生成语法分析器的工具,它根据用户定义的上下文无关文法规则解析由Lex生成的符号流。Bison处理的输入文件描述了语法...

    lex&yacc.doc

    Yacc,全称Yet Another Compiler Compiler,它的任务是处理由Lex生成的词法单元,进一步进行语法分析,生成解析树。Yacc文件通常包含语法规则和动作,当词法分析器识别出符合语法规则的词法单元序列时,就会调用相应...

Global site tag (gtag.js) - Google Analytics