一个好的编辑器,需要具备三个核心模块:前段输入分割器, 前端文本词法分析器和后端符号表收集器。
前端输入分割器主要功能是把用于需要的感知的光标处关联文本进行词法分割,形成调度树,这样就可以知道当前需要感知的对象他的它的原始类型。
前端文本词法分析器:这个主要是对当前编写的文件进行词法分析,形成抽象语法树,从而显示文本的结构化特征,C++,Java这些强类型语言很好实现,但是Lua这种弱类型的语言实现起来难度有点大。
后端符号表收集器:说白就是了符号数据库,比如类,类下面的函数,方法等。这个越丰富,感知功能越强。其实VS,Eclipse都是这样的原理。
昨天星期天,带完女儿晒太阳,晚上在家里实现了前段输入法分割器。感觉还不错,同时写了一个小型的自动化测试框架。很不错。
先看一下测试用例,总共24条Case,应该能Cover住大部分用户输入的需求了,忘记说了,这是用Lua写的。
require "ParserManager"
require "AutomationTestManager"
local strInput1 =
[[
print( cc.Director.getContentScaleFactor())
local result = cc.calProduct( cc.Director.createScene(
{
name = "Warren",
function() return 2 end }).
getPhysicsWorld( pm.getProductName(_G) ).name).
]]
local strInput3 =
[[
cc.Director.createScene(
{
name = "Warren",
function() return 2 end }).
getPhysicsWorld( pm.getProductName(_G) ).name( 23).
]]
local strInput2 = [[
print( cc.Director.getContentScaleFactor())
local result = cc.calProduct( cc.Director.createScene(
{
name = "Warren",
function() return 2 end }).
getPhysicsWorld(dddd).
]]
local testSet = {
case1 = {".", result = {} },
case2 = {"name.", result = {"name"}},
case3 = {"name1.name2.",result = {"name2","name1"}},
case4 = {"n.", result = {"n"}},
case5 = {"1.", result = {"1"}},
case6 = {" ", result = {} },
case7 = {"name().",result = {"name"}},
case8 = {"name(.",result = {}},
ca