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
相关推荐
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 Flex Yacc”...
**YACC(Yet Another Compiler Compiler)**:YACC是一种语法分析器生成器,能够识别更高级别的语法结构。它基于上下文无关文法(Context-Free Grammar,CFG),能够处理复杂的嵌套结构,例如括号的平衡性检查。在...
《Lex和Yacc简明教程》是一份深入探讨编译器构造工具的宝贵资源,主要关注于Lex和Yacc这两个经典工具。它们在计算机科学领域,尤其是编译器设计和实现中扮演着至关重要的角色。本文将详尽阐述这两个工具的基本概念、...
YACC是“Yet Another Compiler-Compiler”的缩写,它是一个语法分析器生成器。YACC接收一个包含语法规则和动作的文件,生成C代码来执行这些规则,进行语法分析。这个过程涉及解析输入的词法单元,构建抽象语法树,并...
Yacc,全称Yet Another Compiler-Compiler,是另一个关键工具,用于生成语法分析器。Yacc文件通常包含语法规则和动作,定义了语言的句法结构。Yacc规格文件中,语法规则以Bison(Yacc的现代版本)的语法描述,如“%...
压缩包中的"lex and yacc.chm"可能是LEX和YACC的详细参考手册,以CHM(Compiled HTML Help)格式提供,这种格式便于离线查阅和搜索。"lex与yacc.pdf"可能是书籍的电子版,包含了更深入的理论和实践指导。"红黑软件...
**Yacc**(Yet Another Compiler Compiler)则是一个用于生成语法分析器的工具,负责根据语法规则构建抽象语法树。这两个工具通常配合使用,以实现复杂文本的解析。 #### 三、环境配置篇 - **必备工具:** - **Lex...
1. 学习如何编写lex和yacc/flex和bison的规范文件,定义词法和语法规则。 2. 掌握词法分析和语法分析的基本概念。 3. 理解编译器构造的核心原理,包括词法分析、语法分析、错误处理和符号表管理。 4. 实践编写简单的...
接着,我们来看Yacc,全称Yet Another Compiler-Compiler。Yacc是一种语法分析器生成器,它用于处理编译器设计中的语法分析阶段。在这个阶段,编译器根据语法规则解析词法单元流,构建抽象语法树(AST)。Yacc需要...
接着,Yacc(Yet Another Compiler-Compiler)是一个语法分析器生成器,它根据一套语法规则(通常以巴科斯范式或扩展巴科斯范式表示)来解析由Lex生成的tokens,构建抽象语法树(AST),并执行必要的计算。...
项目文件“compiler_lex-yacc”可能包含了 lex 规则文件(如 lexer.l 或 lexer.ll)和 yacc 规则文件(如 parser.y 或 parser.yy),以及生成的 C 代码文件(如 lexer.c 和 parser.c)和其他支持文件。编译这些文件...
1. release.doc:这是关于lex和yacc在Windows环境下的发布文档,可能包含安装指南、版本信息以及系统要求等,对于初次使用者来说是重要的参考资源。 2. logo.gif:可能是lex_yacc的项目标识,有助于用户识别和建立...
**Yacc**(Yet Another Compiler Compiler)则是一款语法分析器生成器,它依据上下文无关文法(CFG)解析输入流,识别出语句和表达式的结构。Yacc能够处理复杂的文法规则,自动构建语法树,从而为后续的语义分析、...
接下来,我们来看看Yacc,即Yet Another Compiler-Compiler,现在通常称为Bison。Bison是一个用于生成语法分析器的工具,它根据用户定义的上下文无关文法规则解析由Lex生成的符号流。Bison处理的输入文件描述了语法...
Yacc,全称Yet Another Compiler Compiler,它的任务是处理由Lex生成的词法单元,进一步进行语法分析,生成解析树。Yacc文件通常包含语法规则和动作,当词法分析器识别出符合语法规则的词法单元序列时,就会调用相应...