维基百科的 Nuva 语言介绍

Nuva是一种面向对象的动态脚本语言,具有简单的语法和强大的功能。它支持自动垃圾回收和面向对象编程,并且内置了正则表达式、O/R Mapping及HTML/XML界面引擎,适用于代码生成和应用程序开发。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Nuva编程语言

维基百科,自由的百科全书

 
跳转到: 导航, 搜索

Nuva语言是一种面向对象的动态脚本语言。Nuva对应汉语的女娲一词。女娲是中国上古时代的神话传说人物。

目录

[隐藏]

[ 编辑]

Nuva语言的设计目的

Nuva语言的设计目的是用于基于模板的代码生成。除了用于代码生成领域外,Nuva语言也能用于开发应用程序,如文本和数据处理、GUI 应用程序等。

[ 编辑]

Nuva语言特点

[ 编辑]

语法简单灵活

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语言支持自动垃圾回收,程序员不需显式释放其所创建的对象。

[ 编辑]

模板专用的语言元素

Nuva语言为模板增加了专用的语言元素,方便模板的编写。

<. | .> | [. | .] 模板标记可以混合配对使用,对于格式要求很严格的场合非常有用。

 [.='Hello, Nuva!'.]
<.='Hello, Nuva!'.>
[.='Hello, Nuva!'.>
<.='Hello, Nuva!'.]

[.之前的所有空白字符原样输出,.]之后的所有空白字符(包括换行)也原样输出;

如果行首到<.之间均为空白字符,则该部分空白字符不输出,否则原样输出;

如果.>到行尾之间均为空白字符,则该部分空白字符和换行不输出,否则也原样输出。

Nuva语言特有的fileassign结构能够非常方便的对输出进行组合、分解,从而方便了模板的编写。

[ 编辑]

Nuva虚拟机特点

[ 编辑]

内置了正则表达式引擎

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 的界面引擎

Nuva虚拟机内置了基于 HTML/XML 的界面引擎,能够方便的编写 GUI 应用程序,典型的例子就是 Macrobject CodeAuto 代码生成器

[ 编辑]

Nuva语言代码示例

[ 编辑]

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
.>
[ 编辑]

外部链接

 
本文来自《维基百科》,本文内容在GNU自由文档许可证下发布。
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值