FLEX中文手册.pdfVIP

  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文档。上传文档
查看更多
FLEX 中文手册 一些简单的例子 输入文件的格式 模式 如何匹配输入 动作 生成的扫描器 开始条件 文件结尾规则 与 yacc 一起使用 一、一些简单的例子 首先给出一些简单的例子,来了解一下如何使用 flex 。下面的flex 输入所定 义的扫描器,用来将所有的“ username”字符串替换为用户的登陆名字: %% username printf(%s, getlogin()); 默认情况下,flex 扫描器无法匹配的所有文本将被复制到输出,所以该扫描 器的实际效果是将输入文件 复制到输出,并对每一个“username”进行展开。在这个例子中,只有一个规 则。“username”是模式 (pattern),“printf”是动作(action )。“%%”标志着规则的开始。 这里是另一个简单的例子: int num_lines = 0, num_chars = 0; %% \n ++num_lines; ++num_chars; . ++num_chars; %% int main(void) { yylex(); printf(# of lines = %d, # of chars = %d\n, num_lines, num_chars); } 该扫描器计算输入的字符个数和行数(除了最后的计数报告,并未产生其它 输出)。第一行声明了两 个全局变量,“num_lines”和“num_chars”,可以在 yylex() 函数中和第二个 “%%”后面声明的 main()函数中 使用。有两个规则,一个是匹配换行符(“\n”)并增加行数和字符数,另一个 是匹配所有不是换行符的 其它字符(由正规表达式“.”表示)。 一个稍微复杂点的例子: /* scanner for a toy Pascal-like language */ %{ /* need this for the call to atof() below */ #include math.h %} DIGIT [0-9] ID [a-z][a-z0-9]* %% {DIGIT}+ { printf( An integer: %s (%d)\n, yytext, atoi( yytext ) ); } {DIGIT}+.{DIGIT}* { printf( A float: %s (%g)\n, yytext, atof( yytext ) ); } if|then|begin|end|procedure|function { printf( A keyword: %s\n, yytext ); } {ID} printf( An identifier: %s\n, yytext ); +|-|*|/ printf( An operator: %s\n, yytext ); {[^}\n]*} /* eat up one-line comments */ [ \t\n]+ /* eat up whitespace */ . printf( Unrecognized character: %s\n, yytext ); %% int main(int argc, char **argv) { ++argv, --argc; /* skip over program name */ if ( argc 0 ) yyin = fopen( argv[0], r ); else yyin = stdin; yylex(); } 这是一个类似 Pascal 语言的简单扫描器的初始部分,用来识别不同类型的标 志(tokens )并给出报告。 这个例子的详细介绍将在后面的章节中给出。 二、输入文件的格式 flex 输入文件包括三个部分,通过“%%”行来分开: definitions (定义)%% rules (规则)%% user code (用户代码)

文档评论(0)

0520 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档