目录
- 1语言概述:
- ▪设计目的
- ▪设计特点
- ▪主要应用
- 2语言特点
- ▪语法简单灵活
- ▪动态无约束
- ▪支持面向对象
- ▪自动垃圾回收
- ▪模板专用元素
- 3虚拟机特点
- ▪内置了正则表达式引擎
- ▪内置了 O/R Mapping 引擎
- ▪内置了基于HTML/XML 的界面引擎
- 4代码示例
- ▪Hello, Nuva!
- ▪foreach | O/R Mapping
- ▪file | 生成文件
- ▪assign | 捕获输出
- ▪函数 | 递归调用
- ▪类 | 多态性
>语言概述:
>设计目的
Nuva (
女娲) 语言是一种
面向对象的动态
脚本语言 ( Scripting Language ) ,它的设计目的是用于基于
模板的 ( Template Based )
代码生成 ( Code Generation )。除了用于
代码生成 ( Code Generation ) 领域外,Nuva (
女娲) 语言也能用于开发应用程序,如文本和数据处理、GUI
应用程序等。
Nuva (
女娲) 语言的设计目的是用于基于
模板的 ( Template Based )
代码生成 ( Code Generation ) ,因此 Nuva (
女娲) 语言中包含了专门用于模板的
语言元素,编写模板更为灵活方便。
Nuva (
女娲)
虚拟机内置了 O/R Mapping ( Object-Relation Mapping ) 引擎,您可以通过
面向对象的方式直接存取
数据库架构和数据。
Nuva (女娲)
虚拟机内置了基于 HTML/XML 的
界面引擎,能够方便的编写 GUI
应用程序 ( Macrobject CodeAuto 就是用 Nuva 语言编写的)。
>设计特点
我们在开发 XObject、CodeAuto、HelpAuto、WebAuto、AppAuto 等产品的时候,需要一种基于
模板的代码生成工具。在考察了一些生成工具以后,发现它们的模版技术不够简便,因此我们决定自己来实现它。起初我们的模版采用一种简单的标记技术,并实现了我们的第一个版本的生成工具。然后这种标记技术得到扩展,变得非常像一门新的语言,我们决定对其进行规范化,于是就有了 Nuva。
Nuva 语言的设计目的就是用于基于
模板的
代码生成,因此我们决定这门新的语言要有如下特点:
l 语法简单灵活;
l 动态的,无类型约束;
l 自动垃圾回收;
l 内置 O/R Mapping 支持;
l 模版专用的语言元素.
>主要应用
Nuva 除了用于
代码生成外,也能用于开发应用程序,如文本和数据处理、GUI 应用程序等。
l 内置 O/R Mapping 引擎,能够简便的存取关系数据。
l 基于 HTML/XML 的界面引擎,能够方便的编写 GUI 应用程序。
>语言特点
>语法简单灵活
Nuva语言采用类似伪码的语法风格,结构之间可以任意嵌套,
关键字和
运算符兼容大部分现有的编程语言,非常容易学习。
<.
if (a = b && c == d or e <> f)
?? foo()
function foo()
Result = 'foo'
end function
end if
.>
>动态无约束
Nuva语言采用动态类型,使用时不需声明类型,赋值计算时自动进行类型转换,如下:
<.
var a = '1'
a ++
?? 'a' ~ a
// 结果为: a2
.>
>支持面向对象
>自动垃圾回收
Nuva语言支持自动垃圾回收,程序员不需显示释放其所创建的对象。
>模板专用元素
Nuva语言为
模板增加了专用的语言元素,方便
模板的编写。
<. | .> | [. | .] 模板标记可以混合配对使用,对于格式要求很严格的场合非常有用。
[.='Hello, Nuva!'.]
<.='Hello, Nuva!'.>
[.='Hello, Nuva!'.>
<.='Hello, Nuva!'.]
凡[.之前的所有空白字符原样输出,.]之后的所有空白字符(包括换行)也原样输出;
如果行首到<.之间均为空白
字符,则该部分空白字符不输出,否则原样输出;
如果.>到行尾之间均为空白字符,则该部分空白字符和换行不输出,否则也原样输出。
Nuva语言特有的file和assign结构能够非常方便的对输出进行组合、分解,从而方便了
模板的编写。
>虚拟机特点
>内置了正则表达式引擎
Nuva虚拟机内置了正则表达式引擎,能够方便的进行文本处理。
<.
var text = System.File.Load('Regex_Test.nuva')
foreach(str = text.RegexMatchs('\w+', ))
?? str
end foreach
.>
输出如下的结果:
var
text
System
File
Load
Regex_Test
nuva
foreach
str
text
RegexMatches
w
str
end
foreach
>内置了 O/R Mapping 引擎
Nuva
虚拟机内置了 O/R Mapping 引擎,可以通过
面向对象的方式直接存取
数据库架构和数据。
>内置了基于HTML/XML 的界面引擎
>代码示例
>Hello, Nuva!
<.. "Hello, Nuva!" Demo ..>
<.
//======================================
// Hello, Nuva! (1)
//======================================
?? 'Hello, Nuva!'
/*======================================
Hello, Nuva! (2)
======================================*/
function HelloNuva()
?? "Hello, Nuva!";
end function
HelloNuva();
/*======================================
Hello, Nuva! (3)
======================================*/
class Nuva()
function Hello()
?? 'Hello, Nuva!';
end function
end class
var n = Nuva();
n.Hello();
.>
>foreach | O/R Mapping
<.
function Foreach_Demo()
// Load Schema from a Xml file
var schema = System.Data.LoadSchema(
System.Path.ProjectPath ~ '..\Northwind\Northwind.xobject'
);
?? '--------------------'
?? 'Tables Order by Name'
?? '--------------------'
foreach(table = schema.Tables.OrderbyName)
?? table.Name
end foreach
?? '---------------------------------'
?? 'Tables Filter by Name.Length < 10'
?? '---------------------------------'
foreach(table = schema.Tables | table.Name.Length < 10)
?? table.Name
end foreach
end function
.>
>file | 生成文件
<.
function File_Demo()
?? \r\n ~ '--Read file and Output here--'
file('codeexamples.nuvaproj') end file
// Read file and write to 'Target', overwrite it if exist
file('codeexamples.nuvaproj', true)
Target = 'temp.target'
end file
?? \r\n ~ '--Read file dynamically and Output here--'
file()
FileName = System.Path.ProjectPath ~ 'output\temp.target'
end file
// Delete file
System.File.Delete(System.Path.ProjectPath ~ 'output\temp.target')
end function
.>
>assign | 捕获输出
<.
function Assign_Demo()
// 'Result' assigned from the output in the assign statement
assign(Result).]
Generate Text ... @[.=System.Now.] ...
<.end assign
end function
.>
>函数 | 递归调用
<.
/*--------------------------------------------------------
Factorial
--------------------------------------------------------*/
function Factorial ( N )
if (N <= 1)
Result = 1;
else
Result = N * Factorial(N - 1); // Recursion Call
end if;
end function;
.>
>类 | 多态性
<.
function Class_Demo()
class ClassA()
function Do()
this.DynDo()
end function
function DynDo()
?? 'ClassA'
end function
end class
class ClassB = ClassA()
function DynDo()
?? 'ClassB'
end function
end class
var c1 = ClassA()
var c2 = ClassB()
c1.Do()
c2.Do()
end function
.>
相关信息未经许可得到自41021653