Nuva

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

(重定向自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
 .>

[编辑] 外部链接



Original-Page: Nuva - 维基百科,自由的百科全书
 Web-Blaster V2.21 Close Webblaster Floater
The page now displayed was connected to the database of the Assoziations-Blaster (Deutsche Version) through filtering it with the Web-Blaster.

The whole process takes place in real time and no data from other servers is saved anywhere.

In order to see this page without the filter and loaded from its original server, the Webblaster must be turned off.

Turn Off Webblaster