c语言解释器parser剖析器笔记与心得.docxVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
C 语言解释器 Parser 剖析器——笔记与心得 C 语言解释器 LittleC 的演示代码 C 语言解释器 C 语言解释器 Interpreter 解释器部分的笔记与心得 C 语言解释器 Parser 剖析器——笔记与心得 longqzh posted @ 2010 年 7 月 08 日 07:25 in Little C Interpreter with tags c 解释器 C 语言解释器 interpreter 读取和分, 1656 阅读 THE LITTLE C INTERPRETER 读取和分 表达式剖析器( THE EXPRESSION PARSER) 析表达式的这部分代码叫做表达式剖析器。毫无疑问,表达 式剖析器是 C 解释器中单一的最重要的部分。 因为 C 语言定 义表达式的方式比其他语言更加粗鄙,所以用大量的代码组 来设计 C 的表达式剖析器。许多商业的编译器用一种由 成的 C 成的 C 源文件来实现表达式剖析器。 有几种不同的方式 parser-generator 创建的 table-driven parser 。尽管 table-driven parser 一般来说要快过其他方式,但却很难手 工构建。为了开发简易的 C 解释器,在这里我们使用递归 继承剖析器( recursive-descent parser. ) 个递归 -继承剖析器本质上是一大堆处理表达式的互相 递归的函数。如果是在编译器里,那么剖析器将被用来生成 与源码相符的标准的目标代码。无论如何,在解释器中,剖 析器的目的就是对给定的表达式求值。 将源代码变成他们的组成元素 所有解释器的基础是一个读取源码然后返回下一个逻辑 符号的特殊的函数。基于历史原因,这些逻辑标记一般与标 C 语言,记 (token) 相关联。一般而言,计算机语言,特别是 依据标记来定义程序。你可以想象标记是一个不可见的程序 单元。比如说,相等运算符 == 就是一个标记。这两个等于号 分开后意义将彻底改变。同理 ,if 也是一个标记。在 C C 语言, 中无论是 i 还是 f 都没有其他意思。 在 ANSI C标准中,标记被定义为属于下列几组:keywordsidentifiers constantsstrings 在 ANSI C 标准中,标记被定义为属于下列几组: keywords identifiers constants strings operators pinctuation keywords关键字)是那些如 keywords 关键字)是那些如 while 的构成 C 语言的标 记。 Identifier 记。 Identifier 识别符)是变量、函数、用户定义类型的名 字。而 Constants (常量)和 Strings (字符串)是不解自明 的,就像 operators (运算符)一样。最后 Punctuation (标 等。 点符号)包括了几个项目,像分号,逗号,大括号,小括 点符号)包括了几个项目,像分号,逗号, 大括 号, 小括 在简易 C 解释器中,这个被称作 get_token() 的函数可以 从源码中读取标记。 1234567891011121314151617181920212223242526272 8293031323334353637383940414243444546474849505 1525354555657585960616263646566676869707172737 4757677787980818283848586878889909192939495969 7989910010110210310410510610710810911011111211 3114115116117118119120121122123124125126127128 1291301311321331341351361371381391401411421431 register44145146147148/*Get a token*/get_token(){ register char *temp;token_type=0;tok=0;temp=token; char *temp; token_type=0;tok=0; temp=token; *temp=\0;/* skip over white space*/while(iswhite(*prog)amp;amp;*prog) *temp=\0; /* skip over white space*/ while(iswhite(*prog)amp;amp;*prog) ++prog; if (*prog==\r)++prog;++prog; if (*prog==\r) ++pr

文档评论(0)

大宝&小宝 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档