用Lex编写的简易版C语言词法分析器(编译原理大作业1)

本文讲解关于如何用lex工具来编写一个简易版的C语言的词法分析器。我主要通过一个完整的项目例子来进行讲解。当然这篇文章面向已经对lex有所了解但还不会具体运用的读者,如果对lex一无所知,请看我的另一篇文章。
Lex使用讲解
下面进入本文主题。

  1. 项目简介
    首先先提供我这个项目将要完成的软件的要求。目标是利用lex编写C–(C语言子集)语言的词法分析器。完成C–语言的词法分析器,词法分析器的输入为C–源代码,输出为识别单词的二元属性,其中C–的定义大体如下:
    关键字:while break continue for if else float int void return main
    算符包括:+ - * / =   >=   <=  ==
    界符包括:( ){ } ;
    标识符常数定义与C大体相同,同时包含了注释的处理。
  2. lex源码的编写
    2.1 由于我们已经得知lex源文件主要是分为三个部分,首先是第一部分定义段的编写,话不多说,先上代码。
%{
   
    int wordCounter = 0;
    int charCounter=0;
    int column =0,line=1;
    void addLine(int);
    void addColumn(int);
    void clearColumn();
    void addChar(int);
    void addWord(int);
%}

line_comment           (\/\/.*\n)

char                   '[^']'
string                 \"[^\"]*\"
letter                 [A-Za-z_]
digit                  [0-9]
identifier             {
   letter}({
   letter}|{
   digit})*
reserveword            "break"|"main"|"continue"|"else"|"float"|"for"|"if"|"int"|"return"|"void"|"while"
int                    {
   digit}+
float                  {
   digit}*(\.{
   digit}+)?(e|E[+\-]?{
   digit}+)?
operator               "-"|"+"|"="|"=="|"*"|"/"|"<="|&#
  • 20
    点赞
  • 148
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值