编译原理——使用Lex实现词法分析

一、实验目的

理解编译器词法分析的过程

掌握LEX工具的使用

二、实验器材

计算机 安装了C语言开发环境、Flex工具

三、实验题目

使用Flex工具,对给定编程语言进行词法分析。

四、实验内容

某语言下列词法定义如下:

digit → 0|1|2|3|4|5|6|7|8|9

letter → A|B|C|D|...|X|Y|Z|a|b|...|y|z|_

integer → digit digit*

identify → letter ( letter | digit )*

operator → +|-|*|/|%|==|!=|>|<|>=|<=|&&|\|\||!

reserved → void|int|while|if|else|return|break|continue

symbol → (|)|,|;|{|}

commnet → /\*[^*]\*/

编写LEX程序,识别出这个语言组成的串中所有符号(integer, identify, operator, reserved, symbol),并在屏幕上输出相关内容和错误信息(如果有错误),注释的内容不显示。

程序如下:

%{
    #include<stdio.h>
    #include<string.h>
    %}
    letter      [A-Za-z_]
    digit       [0-9]
    integer     {digit}+
    identify    {letter}({letter}|{digit})*
    operator    "+"|"-"|"*"|"/"|"%"|"=="|"!="|">"|"<"|">="|"<="|"&&"|"||"|"!"
    reserved    "void"|"int"|"while"|"if"|"else"|"return"|"break"|"continue"
    symbol      "("|")"|","|";"|"{"|"}"
    commnet    "/*"[^\*]*"*/"
    
    %%
    {commnet}   {  ;  }
    {integer}   { printf("integer[%s]", yytext); }
    {reserved}  { printf("reserved[%s]", yytext); }
    {identify}  { printf("identify[%s]", yytext); }
    {operator}  { printf("operator[%s]", yytext); }
    {symbol}    { printf("symbol[%s]", yytext); }
    %%
    
    int main(int argc,char** argv) {
      yylex();
      return 0;
    }
    int yywrap(){
        printf("Lex Finished!\n");
        return 1;
    }

  • 8
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

夜不下的黄昏

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值