代码转换工具(as3 - cocos2dx) (三) 语句分析

因为编译原理这本书实在太厚,不想花太多时间系统的学习这部分,但是我也有自己的想法,所以后面的工作是按照自己的想法来做的,我想着也是一种比较直接的做法。

上一篇写了类的结构分析,接下来进行的是语句的分析。

例如下面这样一段as3代码如何转换为js代码

var list = [1,2,3];
var sun:int = 0;
for(var i:int = 0; i < list.length; i++)
{
  sun += list[i];
}
抛开类的结构剩下的就是具体的语句分析了,类有成员变量和成员函数,函数的类容有各种各样的语句构成。所以我分析一个类大概是这样的:

类
{
    成员变量1;
    成员变量2;
    ...    
    成员函数1;
    成员函数2;
    ...
} 
分析成员函数的内容就是这个部分的重点,语句分析,

我归纳语句为以下几种

package datas.sentenceStruct
{
	/**
	 *语句类型 
	 * 
	 */	
	public class SentenceType
	{
		/**
		 *表达式
		 */	
		public static const EXPRESS:String = "=";
		/**
		 *定义语句,一般指定义变量
		 */
		public static const DEFINE:String = "var";
		/**
		 *if语句 
		 */		
		public static const IF:String = "if";
		/**
		 *for语句 
		 */		
		public static const FOR:String = "for";
		/**
		 *while语句 
		 */		
		public static const WHILE:String = "while";
		/**
		 *switch语句 
		 */		
		public static const SWITCH:String = "switch";
		/**
		 *break语句 
		 */		
		public static const BREAK:String = "break";
		/**
		 *return语句 
		 */		
		public static const RETURN_TYPE:String = "return";
		
		/**
		 *语句块 
		 */		
		public static const BLOCK:String = "{}";
		
		/**
		 *空语句 
		 */		
		public static const EMPTY:String = ";";
		
		/**
		 *require语句 ,js中有效
		 */		
		public static const REQUIRE:String = "require()";
		
		/**
		 *throw语句 
		 */		
		public static const THROW_TYPE:String = "throw";
	}
}

语句的分析流程可以这样概括

function getSentence(file):SentenceBase
{
   if(是for循环) return new ForSentence(file);
   ...
   return 表达式语句(file);
}


判断语句的类型后再进行具体的分析。如果不是特殊的语句那么这个语句肯定是一个表达式语句。

例如for语句的结构如下

for(语句1;表达式1;表达式2) 内容语句
分析出关键字和分割符,具体的语句分析还是走上面的流程。


语句中除了表达式分析比较复杂,别的其实都很简单,没什么花哨的东西。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值