zoukankan      html  css  js  c++  java
  • 《游戏脚本高级编程》——第13章 词法分析器

    《[游戏脚本高级编程].(Game.Scripting.Mastery).(美)Alex.Varanese.扫描版.pdf》

     

     第13章是极好的编译原理入门材料!!

    游戏脚本高级编程引领读者进入程序员们称之为“游戏脚本编程”的全新领域,本书将从概括论述什么是脚本编程以及它是如何实现的开始,阐述游戏编程的理念,根据作者多年的开发经验,使读者掌握使用脚本是把游戏代码和主引擎分离开的最理想的办法,带读者进入神秘的游戏脚本语言世界,学习如何编写脚本语言,编译器理论,享受游戏编程方面的极大乐趣。

       本书是游戏开发经典丛书系列之一,适合游戏开发人员、业余游戏软件开发爱好者,也可以作为大专院校相关专业的参考书。

    作者介绍:

      Alex Varanese从20世纪80年代中期, 也就是在他5岁时就被游戏开发给迷住了, 他首先把眼光投向了——带着迷恋和某种不可解释的亲密——8位的任天堂娱乐系统;同时他也对艺术有极大的热情, 但是后来才成为一个真正的代码编写者, 大约是在15岁左右, 那个时候使用的是QBASIC. 18岁的时候, 他作为一个Java程序员在硅谷开始了他的程序员生涯, 从事J2EE平台上的一些爆发的B2B项目, 而在这之前大约一年他还是一个半自由撰稿人和室内图形设计者. 然而由于感觉到在办公室的生活太受限制, 他又重新将注意力投向了游戏开发和对先进技术的追求. 他现在是eGameZone(//www.egamezone.net)的首席设计师和系统架构师, Andre LaMothe的Xtreme Games LLC继任者.

      他在空闲时间编程, 渲染, 以第三人称描述自己, 并在弹出式广告上大肆宣传, 在百老汇经典作品Dude, Where's My Car?The Musical中担任主角,同时表现出不可忽视的发展势头.Alex Varanese的E-mail是alex@amvbooks.com,随时愿意并期望回答有关本书的任何问题,所以可以尽管向他提问!

    游戏脚本高级编程目录:

    第1篇 脚本编程的基本原理
    第1章 脚本编程概论
    1.1 什么是脚本编程
    1.2 结构化的游戏内容——一种简单的游戏设计方法
    1.3 通过将逻辑和具体实现相互分离来改善这种方法
    1.4 硬编码的危险性
    1.5 将功能函数存放到外部文件
    1.6 脚本是如何运行的
    1.7 脚本系统的基本类型
    1.7.1 面向过程的语言系统和面向对象的语言系统
    1.7.2 基于命令的语言系统
    1.7.3 动态链接的模块系统
    1.7.4 编译型代码和解释型代码
    1.7.5 现有的脚本设计方法
    1.8 总结
    第2章 脚本编程系统的应用
    2.1 编写脚本的普遍目的
    2.2 角色扮演游戏(role playing games,rpgs)
    2.2.1 复杂而又有深度的故事情节
    2.2.2 非玩家角色(Non-Player Characters, NPCs)
    2.2.3 物品和武器
    2.2.4 敌人
    2.3 第一人称射击游戏(first-person shooters,fpss)
    2.3.1 物品、谜题和开关
    2.3.2 敌人智能(Enemy AI)
    2.4 总结
    第2篇 基于命令的脚本
    第3章 基于命令的脚本编程绪论
    3.1 基于命令的脚本编程的基础知识
    3.1.1 高级的引擎控制
    3.1.2 命令
    3.1.3 你这个领域中的大师
    3.1.4 实际解决掉的一些问题
    3.2 基于命令的脚本编程综述
    3.2.1 游戏引擎的功能估计
    3.2.2 载入和执行脚本
    3.3 实现一种基于命令的语言
    3.3.1 设计这种语言
    3.3.2编写脚本
    3.3.3 实现
    3.4 为一个游戏的介绍顺序编写脚本
    3.4.1 语言
    3.4.2 脚本
    3.4.3 执行
    3.5 为rpg游戏中某个角色的行为编写脚本
    3.5.1 语言
    3.5.2 改进语法
    3.5.3 管理游戏中的角色
    3.5.4 脚本
    3.5.5 执行
    3.5.6 游戏演示中的主循环
    3.6 并发的脚本执行
    3.7 总结
    3.8 CD上的内容
    3.9 挑战
    第4章 基于命令的高级脚本
    4.1 新的数据类型
    4.1.1 布尔变量
    4.1.2 支持浮点数
    4.1.3 通用目的的符号常量
    4.2 简单迭代和条件逻辑
    4.2.1 条件逻辑和游戏标记
    4.2.2 将代码按块分组
    4.2.3 块列表
    4.2.4 迭代逻辑
    4.2.5 嵌套
    4.3 基于事件的脚本
    4.4 将脚本编译成二进制格式
    4.4.1 提高执行速度
    4.4.2 检测编译时的错误
    4.4.3 恶意的脚本攻击
    4.4.4 商用编译器是如何工作的
    4.5 基本的脚本预处理
    4.6 总结
    第3篇 结构化的脚本编程语言概述
    第5章 结构化的脚本编程系统介绍
    5.1 总体的脚本编写结构
    5.1.1 高级代码
    5.1.2 低级代码
    5.1.3 虚拟机
    5.2 深入分析XtremeScript
    5.2.1 高级代码/编辑
    5.2.2 低级代码/汇编
    5.2.3 虚拟机
    5.3 XtremeScript系统
    5.3.1 高级部分
    5.3.2 低级部分
    5.3.3 运行时间
    5.4 总结
    第6章 对现有脚本编程系统的集成和使用
    6.1 集成(integration)
    6.2 脚本系统的执行过程
    6.3 跳动的外星人头像演示
    6.4 lua(以及基本的脚本编程概念)
    6.4.1 Lua系统一瞥
    6.4.2 Lua语言
    6.4.3 将Lua语言与C语言相集成
    6.4.4 高级的Lua话题
    6.4.5 网络链接
    6.5 python
    6.5.1 Python系统一览
    6.5.2 Python语言
    6.5.3 Python与C的集成
    6.5.4 高级话题
    6.5.5 网络链接
    6.6 tcl
    6.6.1 ActiveStateTcl
    6.6.2 Tcl语言
    6.6.3 Tcl和C的集成
    6.6.4 高级主题
    6.6.5 网络链接
    6.7 你到底该使用哪个脚本编程系统呢
    6.8 编写一个实际的游戏
    6.9 总结
    6.10 CD上的内容
    第7章 设计一个面向过程的脚本编程语言
    7.1 语言的常见类型
    7.1.1 汇编类型的语言(Assembly-Style Languages)
    7.1.2 权衡利弊
    7.2 函数
    7.2.1 面向对象程序设计
    7.2.2 XtremeScript语言概述
    7.2.3 语法和特性
    7.2.4 保留字列表
    7.3 总结
    第4篇 设计和实现一种底层语言
    第8章 汇编语言入门
    8.1 什么是汇编语言
    8.2 为什么现在讲述汇编
    8.3 汇编语言是怎样工作的
    8.3.1 指令
    8.3.2 助记符和操作码
    8.3.3 RISC和CISC
    8.3.4 正交指令集
    8.3.5 寄存器
    8.3.6 堆栈
    8.4 XVM汇编简介
    8.4.1 初始赋值
    8.4.2 XVM指令集
    8.4.3 XASM指示符
    8.5 XVM汇编语言概要
    8.6 小结
    第9章 构造XASM汇编器
    9.1 一个简单的汇编器是如何运作的
    9.1.1 指令的汇编
    9.1.2 变量的会面
    9.1.3 操作数的汇编
    9.1.4 字符串型字面量的汇编
    9.1.5 跳转指令和函数调用汇编
    9.2 XASM概述
    9.2.1 内存管理
    9.2.2 输入: 一个XVM汇编脚本的结构
    9.2.3 输出: 一个XVM可执行文件的结构
    9.3 汇编器的实现
    9.3.1 基本的词法分析/语法分析理论
    9.3.2 基本字符串处理
    9.3.3 汇编器的框架
    9.3.4 词法分析/属性字识别
    9.3.5 错误处理
    9.3.6 语法分析
    9.3.7 构建.XSE可执行文件
    9.3.8 汇编过程
    9.4 小结
    9.5 CD上的内容
    9.6 挑战
    第5篇 设计和实现虚拟机
    第10章 汇编语言入门
    10.1 虚拟机的灵魂
    10.1.1 模拟硬件
    10.1.2 虚拟机的主要组成部分
    10.1.3 多线程
    10.1.4 和主应用程序的集成
    10.2 虚拟机生命周期的简单概述
    10.2.1 装载脚本
    10.2.2 从入口点开始执行
    10.2.3 执行周期
    10.2.4 函数调用
    10.2.5 终止和关闭
    10.3 XVM原型的结构概述
    10.3.1 脚本头
    10.3.2 运行时值
    10.3.3 指令流
    10.3.4 运行时堆栈
    10.3.5 函数表
    10.3.6 主应用程序API调用表
    10.3.7 最终的脚本结构
    10.4 建立XVM原型
    10.4.1 装载.XSE可执行文件
    10.4.2 结构接口
    10.4.3 初始化虚拟机
    10.4.4 执行周期
    10.4.5 终止与关闭
    10.5 概述
    10.6 CD上的内容
    10.7 挑战
    第11章 高级虚拟机的概念和问题
    11.1 新一代虚拟机
    11.2 多线程
    11.2.1 多线程的基本原理
    11.2.2 装载和存储多个脚本
    11.2.3 执行多线程
    11.3 主应用程序集成
    11.3.1 和主应用程序并行运行脚本
    11.3.2 集成接口简介
    11.3.3 XVM的共有接口(Public Interface)
    11.3.4 实现集成接口
    11.3.5 增加线程优先级
    11.4 演示最终的XVM
    11.5 小结
    11.6 CD上的内容
    11.7 挑战
    第6篇 编译高级代码
    第12章 编译理论概论
    12.1 编译理论概述
    12.1.1 编译的几个阶段
    12.1.2 XtremeScript与XASM是如何工作的
    12.1.3 高级编译理论
    12.2 总结
    第13章 词法分析器
    13.1 基础知识
    13.1.1 从字符到单词
    13.1.2 属性标注
    13.1.3 词法分析方法
    13.2 词法分析器的工作
    13.2.1 读入并保存文本文件
    13.2.2 显示结果
    13.2.3 错误处理
    13.3 一个数值词法分析器
    13.1.1 分词策略
    13.1.2 完成这个演示程序
    13.4 分析标识符和保留字
    13.4.1 新的状态和属性符
    13.4.2 测试文件
    13.4.3 升级词法分析器
    13.4.4 完成这个演示程序
    13.5 最后的词法分析器:分隔符、运算符和字符串
    13.5.1 分析分隔符
    13.5.2 分析字符串
    13.5.3 运算法
    13.5.4 完成这个演示
    13.6 总结
    13.7 CD上的内容
    13.8 挑战
    第14章 构造xtremestcript编译器框架
    14.1 策略纵览
    14.1.1 前端
    14.1.2 中间代码模块
    14.1.3 后端
    14.1.4 主要结构
    14.1.5 接口和封装
    14.1.6 编译器的生命周期
    14.2 命令行接口
    14.2.1 Logo和使用信息
    14.2.2 读入文件名称
    14.2.3 读入选项
    14.3 初始化数据结构
    14.3.1 链表
    14.3.2 堆栈
    14.4 初始化和关闭
    14.4.1 全局变量和数据结构
    14.4.2 初始化
    14.4.3 关闭
    14.5 编译器的模块
    14.6 装载模块
    14.7 预处理模块
    14.7.1 单行注释
    14.7.2 块注释
    14.7.3 预处理指令
    14.8 编译器的表格
    14.8.1 符号表
    14.8.2 函数表
    14.8.3 字符串表
    14.9 集成词法分析器模块
    14.9.1 回卷属性符流
    14.9.2 一种新的源代码格式
    14.9.3 其他新的函数
    14.9.4 重置词法分析器
    14.10 语法分析器模块
    14.11 错误处理
    14.11.1 普通错误
    14.11.2 代码错误
    14.11.3 错误层迭
    14.12 中间代码模块
    14.12.1 实现中间代码的方法
    14.12.2 XtremeScript中间代码
    14.12.3 接口
    14.13 代码生成模块
    14.13.1 代码生成基础
    14.13.2 通用格式
    14.14 生成最终的可执行体
    14.15 整理
    14.15.1 初始化编译进程
    14.15.2 打印编译统计数据
    14.15.3 编写测试脚本
    14.16 总结
    14.17 CD上的内容
    14.18 挑战
    第15章 语法分析和语义分析
    15.1 什么是语法分析器
    15.1.1 语法和语义分析
    15.1.2 表达式语法
    15.1.3 语法树
    15.1.4 语法分析是如何工作的
    15.2 XtremeScript语法分析器模块
    15.2.1基础
    15.2.2 分析策略
    15.3 分析语句和代码块
    15.3.1 语法图
    15.3.2 实现
    15.4 分析声明语句
    15.4.1 函数声明
    15.4.2 变量和数组声明
    15.4.3 主应用程序API函数声明
    15.4.4 测试代码生成模块
    15.5 分析简单的表达式
    15.5.1 表达式分析策略
    15.5.2 理解表达式语法分析器
    15.5.3 编码表达式分析
    15.6 完整表达式分析
    15.6.1 新因子类型
    15.6.2 分析函数调用
    15.6.3 新的单目运算
    15.6.4 新的双目运算
    15.6.5 逻辑和关系运算符
    15.6.6 左值和右值
    15.7 独立的运行时环境
    15.7.1 本地应用程序
    15.7.2 主应用程序API
    15.8 分析高级语句和结构
    15.8.1 赋值语句
    15.8.2 函数调用
    15.8.3 return
    15.8.4 While循环
    15.8.5 for循环
    15.8.6 If分支
    15.9 语法图总结
    15.10 测试驱动
    15.10.1 Hello, World!
    15.10.2 绘制矩形
    15.10.3 Bouncing Head示例
    15.11 总结
    15.12 CD上的内容
    15.13 挑战
    第7篇 完成培训
    第16章 应用这个系统开发的一个完整游戏
    16.1 介绍lockdown
    16.1.1 素材来源
    16.1.2 最初的计划和设置
    16.2 脚本策略
    16.2.1 集成XtremeScript
    16.2.2 主API
    16.2.3 编写脚本
    16.2.4 装载和运行脚本
    16.2.5 速度问题
    16.3 如何玩lockdown
    16.3.1 控制
    16.3.2 与物体交互
    16.3.3 区域地图
    16.3.4 战斗
    16.3.5 完成这个目标
    16.4 总结
    16.5 CD上的内容
    16.6 挑战
    第17章 从今往后,何去何从
    17.1 现在究竟该干什么呢
    17.2 扩展你的知识
    17.2.1 编译器理论
    17.2.2 运行时环境
    17.3 高级话题和思想
    17.4 总结

     
     
     
     
    13章 词法分析

     

     

     

     

     

     

     

     

     

     

     

     

     

     

    实质上是用一种相对暴力的方式:拆解 和 枚举了;

    其实,可以把 // 后面的注释也加元组里面去,更清晰 ^_^ 

    "CurrOpState" 当前运算符状态信息:第几个字符串

     

     

     

     

     
     
  • 相关阅读:
    hiho_1081_最短路径1
    hiho_1079_离散化
    hiho_1078_线段树区间修改
    hiho_1069_最近公共祖先3
    【.netcore学习】.netcore添加到 supervisor 守护进程自启动报错
    【.NetCore学习】ubuntu16.04 搭建.net core mvc api 运行环境
    【.NetCore学习】ASP.NET Core EF Core2.0 DB First现有数据库自动生成实体Context
    【vue基础学习】vue.js开发环境搭建
    【vue学习】vue中怎么引用laydate.js日期插件
    【年终总结】个人的2017年年终总结
  • 原文地址:https://www.cnblogs.com/cx2016/p/13123560.html
Copyright © 2011-2022 走看看