自制编译器:词法分析器


词法分析器代码已上传到个人资源中。

当我们的程序源文件进入编译器,首先遇到的就是词法分析器。

词法分析器的作用就是解析源文件,分析出其中的词素,并把这个词素的顺序集输入给语法分析器。

接上篇把所谓的词素也就是终结符号列出来:

if else while ( ) { } cpreop bitop logiop armtcop number literal id NUL new [ ] basetype class private public static return break continue . this

其中cprop包括 > < >= <= == != 即比较运算符

bitop 为位运算符,包括<< >> & | ^

logiop 逻辑运算符 包括 && ||

armtcop 算数运算符 包括 + - * /

number 数字常量 例如12345整形火 1.2345小数

id 标识符 按java规则

literal 字符串常量 如"ROgerwong"

NUL 空串

basetype 基本类型 包括 int char double 三种

当然,为了简单,在这里并不打算讨论非确定有穷自动机和确定有穷自动机的理论以及其之间的转换算法,只是用最朴素的方法,不断的将字符读入缓冲区,然后和这些词素进行比较,然后把这个词素加入到一个ArrayList中。

按着这个方法定义几个数据结构:

定义词素数据结构,共含两个域,1个表示类型,一个表示具体的值,类型的取值也已经标出。

package ravaComplier.lexer;

public class Lexeme {  public int type;  public Object value;  public Lexeme(int t,Object v)  {   type=t;   value=v;  }  @Override  public String toString()  {   return new String("<"+type+":"+value.toString()+">");  }    public static int IF=0;//if  public static int ELSE=1;//else  public static int WHILE=2;//while  public static int BRACKET=3;//各种括号  public static int CPREOP=4;//比较符号  public static int BITOP=5;//位操作符  public static int LOGIOP=6;//逻辑运算符  public static int ARMTOP=7;//算术运算符  public static int NUMBER=8;//立即数  public static int LITERAL=9;//字符串  public static int ID=10;//id  public static int NUL=11;//空  public static int NEW=12;//new 操作符  public static int BASETYPE=13;//基本数据类型  public static int CLASS=14;//关键字class  public static int ACCESSFLAG=15;//public 或者private  public static int STATIC=16;//关键字static  public static int RETURN=17;//关键字return  public static int BREAK=18;//break  public static int CONTINUE=19;//continue  public static int DOT=

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
《P2P技术揭秘:P2P网络技术原理与典型系统开发》从一个全新的视角向读者展示了从P2P初步入门到应用实践的学习之路。《P2P技术揭秘:P2P网络技术原理与典型系统开发》从理论到实践,从基础到项目,循序渐进地讲解了P2P技术的基本知识体系,同时配合开发案例引导读者进行P2P应用实战开发。书中对每一个知识点、原理思想、应用方法及实例都进行了深入浅出的阐述和分析,力求让读者读完《P2P技术揭秘:P2P网络技术原理与典型系统开发》后有所学、有所悟、有所得。 《P2P技术揭秘:P2P网络技术原理与典型系统开发》共14章,分为3篇。主要内容包括P2P概述、P2P网络拓扑结构、P2P网络搜索技术、P2P关键技术及应用、P2P网络中的nat穿透技术、基于P2P的bittorrent(后文简称bt)技术、基于P2P的emule文件共享技术、基于P2P的skype即时通信技术、基于P2P的流媒体技术、基于java的P2P开发平台搭建、sloape的开发包及插件开发技术、基于P2P的即时通信系统的开发与实现、bt系统分析及客户端开发、jxta技术等。另外,《P2P技术揭秘:P2P网络技术原理与典型系统开发》配书光盘中收录了专门为《P2P技术揭秘:P2P网络技术原理与典型系统开发》录制的多媒体教学视频及书中涉及的源代码,便于读者更加直观、高效地学习。 《P2P技术揭秘:P2P网络技术原理与典型系统开发》适合P2P技术入门人员及网络视频、网络电话、多线程下载等网络软件开发人员。另外,《P2P技术揭秘:P2P网络技术原理与典型系统开发》对于大中专院校相关专业的学生和老师也有很好的借鉴意义。 ——《豆瓣读书》

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值