yacc and lex简介

yacc
yacc=Yet Another Compiler Compiler
 是Unix/Linux上一个用来生成编译器的编译器(编译器代码生成器)。yacc生成的编译器主要是用C语言写成的语法解析器(Parser),需要与词法解析器Lex一起使用,再把两部份产生出来的C程序一并编译。
yacc本来只在Unix系统上才有,但现时已普遍移植往Windows及其他平台。
  yacc是开发编译器的一个有用的工具,采用LALR(1)语法分析方法。
  Yacc最初由AT&T的Steven C. Johnson为Unix操作系统开发,后来一些兼容的程序如Berkeley Yacc,GNU bison,MKS yacc和Abraxas yacc陆续出现。它们都在原先基础上做了少许改进或者增加,但是基本概念是相同的。
  由于所产生的解析器需要词法分析器配合,因此Yacc经常和词法分析器的产生器——一般就是Lex——联合使用。IEEE POSIX P1003.2 标准定义了Lex和Yacc的功能和需求。

http://dickey.his.com/byacc/byacc.html Berkeley Yacc 一般认为是目前最好的yacc变种。
http://www.informatik.uni-freiburg.de/proglang/software/essence/ EssenceScheme的LR(1)语法解析器的生成器
http://download.plt-scheme.org/scheme/plt/collects/parser-tools/ 用于DrScheme的语法解析工具
http://www.ssw.uni-linz.ac.at/Research/Projects/Coco/ Coco/R Java和C#的扫描和解析器
http://mhss.nease.net/unix/yacc.html Yacc: 另一个编译器的编译器,Stephen C. Johnson

 LEX是一个词法分析器生成工具
  Lex是LEXical compiler的缩写,Lexical Analyza,是Unix环境下非常著名的工具,
主要功能是生成一个词法分析器(scanner)的C源码,描述规则采用正则表达式 (regular expression)。
描述词法分析器的文件*.l,经过lex编译后,生成一个lex.yy.c 的文件,然后由C编译器编译生成一个词法分析器。
词法分析器,简单来说,其任务就是将输入的各种符号,转化成相应的标识符(token),转化后的标识符 很容易被后续阶段处理。
过程如图 。

你可能感兴趣的:(unix,compiler,编译器,yacc,语法解析工具)