tiger 词法分析实现

用lex实现一个tiger语言的词法分析器.tiger语言词法规范:标识符 以字母开头,由字母、数字和下划线组成的序列。区分大小写字母。注释 可以出现在任意两个单词之间。以/*开始,以*/结束,并且可以嵌套。整型常量 由十进制数字组成的一个序列。没有负整型,对于带负号的整型需返回两个单词字符串常量 由括在双引号之间的零至多个可打印字符、空白符或转义序列组成的序列。 tiger允
摘要由CSDN通过智能技术生成

用lex实现一个tiger语言的词法分析器.

tiger语言词法规范:

  • 标识符
    以字母开头,由字母、数字和下划线组成的序列。区分大小写字母。
  • 注释
    可以出现在任意两个单词之间。以/*开始,以*/结束,并且可以嵌套。
  • 整型常量
    由十进制数字组成的一个序列。没有负整型,对于带负号的整型需返回两个单词
  • 字符串常量
    由括在双引号之间的零至多个可打印字符、空白符或转义序列组成的序列。
    tiger允许的转义序列

    - \n     换行符
    - \t     制表符
    - \^c    控制字符c
    - \ddd   ASCII码为ddd(三位十进制)的单个字符
    - \*     双引号(")
    - \\      反斜线(\)
    - \f___f\ 此序列将被忽略 
    
  • 保留字
    while、for、to、break、let、in、end、function、var、type、array、if、then、else、do、of、nil。

  • 标点符号
    , : ; ( ) [ ] { } . + - * / = <> < <= > >= & | :=

官网框架代码
flex用户手册

实现:

  1. 注释
    设置COMMENT状态。变量count保存注释嵌套层数,实现注释的进入和跳出。
  2. 字符串
    设置STR和VSTR状态。用一动态内存缓存字符串,读入时特殊字符特殊处理,否则加入缓存。字符串结束时如果没出错返回其值。

  3. 错误处理
    errormsg.[ch]文件中实现,用一链表保存每行开始字符序号,跟据给的字符序号输出出错token的行号,列号。

  4. 文件结束
    文件结束即返回,注意EOF在COMMENT、STR和VSTR的出错情况。

    tiger.lex实现:

%{
#include <string.h>
#include "util.h"
#include "tokens.h"
#include "errormsg.h"

int charPos=1;

int yywrap(void)
{
    charPos=
  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值