用户名:
密  码:
验证码:
 
JAVA J2EE J2ME J2SE JSP C/C++ C语言 C++ VC MFC Web前台 Html css JavaScript 软件测试 软件测试入门 LoadRunner Windows Win2008 Win2003 WinXP
.NET ASP.NET VB.NET MVC Linux/Unix Linux Unix Shell Web开发 PHP ASP Ajax IIS Apache 编程语言 C VB Delphi 汇编 数据库 MSSQL Mysql Oracle

Python源码分析4 – Grammar文件和语法分析

www.diybl.com 时间:2008-09-12 作者:佚名 编辑:本站 点击:  [评论]

style="FONT-FAMILY: 宋体; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial">请参考Alfred V. Aho等人所著的Compilers: Principles, Techniques, and Tools一书。为了定义DFAgraminit.c引用了位于grammar.h中的一些类型:arc, state, dfa, grammar

Label定义了从状态转移到另外一个状态所经过的边所对应的符号,可以是非终结符(Non-Terminal),也可以是终结符(Terminal)Label一定依附于一条或者多条边。Lb_type代表符号的类型,如终结符NAME,代表一个标示符,或者非终结符stmt,代表一个语句,等等。Lb_str代表具体符号的内容。比如,label (NAME, “if”)表示当parser处于某个状态,如果遇到了’if’这个标示符,则移动另外一个状态。如果label是一个非终结符的话,情况则要复杂一些,需要跳转到该非终结符对应的另外一个DFA,请参看编译器相关书籍。

/* A label of an arc */

typedef struct {

    int              lb_type;

    char      *lb_str;

} label;

 

arc代表DFA中一个状态到另一个状态的弧/边。A_lbl代表arc所对应的Label,而a_arrow记录了arc的目标状态。因为arc是属于某个状态的,因此不用纪录arc的起始状态。

http://msnpiki.msnfanatic.com/index.php/Main_Page-->

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
如果图片或页面不能正常显示请点击这里 站内搜索:
推荐文章
文章评论
请您留言
昵称:  
验证码:
注册会员
会员登陆
BBS问题帖
频道地图