维基百科的 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
 .>

外部链接

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

posted on 2006-08-23 21:46  Wisdom-zh  阅读(784)  评论(0编辑  收藏  举报

导航