Nuva

Nuva语言是一种面向对象的动态脚本语言。Nuva对应汉语的「女娲」（中国上古时代的神话传说人物）一词。 设计目的是用于基于模板的代码生成。除了用于代码生成领域外，也能用于开发应用程序，如文本和数据处理、GUI应用程序等。 语法简单灵活：采用类似虛擬碼演算法/伪码的语法风格，结构之间可以任意嵌套，关键字和运算符兼容大部分现有的编程语言，非常容易学习。 <. if (a = b && c == d or e <> f)  ?? foo() function foo() Result = 'foo' end function end if .> 动态的，无类型约束：采用动态类型，使用时不需声明类型，赋值计算时自动进行类型转换，如下： <. var a = '1' a ++  ?? 'a' ~ a // 结果为: a2 .> 支持面向对象的编程方法：支持继承性和多态性。 支持自动垃圾回收：程序员不需显式释放其所创建的对象。 模板专用的语言元素 模板标记（「<.」、「.>」、「[.」、「.]」）可以混合配对使用，对于格式要求很严格的场合非常有用。 [.='Hello, Nuva!'.] <.='Hello, Nuva!'.> [.='Hello, Nuva!'.> <.='Hello, Nuva!'.] 凡「[.」之前的所有空白字符原样输出，「.]」之后的所有空白字符（包括换行）也原样输出； 如果行首到「<.」之间均为空白字符，则该部分空白字符不输出，否则原样输出； 如果「.>」到行尾之间均为空白字符，则该部分空白字符和换行不输出，否则也原样输出。 特有的file和assign结构能够非常方便的对输出进行组合、分解，从而方便了模板的编写。 内置正则表达式引擎：能够方便的进行文本处理。 <. 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引擎：可以通过面向对象的方式直接存取数据库架构和数据。 内置基于HTML/XML的界面引擎：能够方便的编写GUI应用程序，典型的例子就是Macrobject CodeAuto代码生成器（页面存档备份，存于互联网档案馆）。 <.. "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(); .> <. 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 .> <. 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 .> <. 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 .> Nuva语言官方主页（页面存档备份，存于互联网档案馆） - 可選（简体中文）或（英文）