编写词法分析程序

Note:

这学期修了严厉的Mr.J的编译原理,不定期更新笔记!
欢迎指正!


TEST 语言的词法规:
  • 标识符:字母打头,后接任意字母或数字

  • 保留字:标识符的子集,包括:if,else,for,while,do, int,write,read,

  • 无符号整数:由数字组成,但最高位不能为0,允许一位的0,

  • 分界符:(、)、;、{、}

  • 运算符:+、-、*、/、=、<、>、>=、<=、!=、==

  • 注释符:/* */


正则表达式:
  • 标识符:        ( a|b|……|z|A|B……|Z )( 0|1|……|9| a|b|……|z|A|B……|Z )*

  • 保留字:        标识符的子集

  • 无符号整数: ( (1……|9 )( 0|1|……|9)* )|0

  • 分界符:        ( | ) | ; | { | }

  • 运算符:        + | - | * | / | = | < | > | >= | <= | != | ==

  • 注释符:        /* (other)* */

NFA

不确定的有穷自动机


DFA

将NFA确定化之后得到的DFA

确定的有穷自动机


程序测试

依据DFA编写词法分析程序

  • 测试数据:
/*This a test program.*/
int abc;
int 123;
int A$@;
int i;
int n;
int b,c;
int 2a;
int a2;
read n;
n = 012345;
for (i=1;i<=n; i= i+1)
{ 
abc=abc+i;
}
if (!n) b = b+c;
/*The loop ended
write abc;
}
  • 测试结果:

控制台报错

  • 分词结果:
    这里写图片描述这里写图片描述

SourceCode
#include<stdio.h>
  • 8
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值