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结构能够非常方便的对输出进行组合、分解,从而方便了模板的编写。
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引擎:可以通过面向对象的方式直接存取数据库架构和数据。
- 内置基于HTML/XML的界面引擎:能够方便的编写GUI应用程序,典型的例子就是Macrobject CodeAuto代码生成器(页面存档备份,存于互联网档案馆)。
代码示例编辑
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 .>
外部链接编辑
- Nuva语言官方主页(页面存档备份,存于互联网档案馆) - 可選(简体中文)或(英文)
🔥 Top keywords: Baike: 首页Special:搜索胖猫跳江事件背着善宰跑九龍城寨之圍城逆天奇案2璩静淚之女王歌手2024Energy (組合)新生 (网络剧)习近平匈牙利邊佑錫劉俊謙 (香港)金智媛神耆小子塞尔维亚金秀賢 (男演員)母亲节猩球崛起:王國誕生九龍寨城馴鹿寶貝家族榮耀之繼承者Seventeen (組合)六四事件不夠善良的我們张维为楊佩潔TripleS支配物种庆余年郭葦昀洪若潭命案金惠奫2024年英雄联盟季中邀请赛春色寄情人BABYMONSTER笑看風雲乘風2024排球少年!!角色列表破墓徐巧芯中华人民共和国中華民國打天下2WIND BREAKER—防風少年—习明泽排球少年!!彭丽媛磁暴ILLIT贾斯汀·比伯逆天奇案BOYNEXTDOOR猿人爭霸戰:猩凶革命張書偉我的婆婆怎麼那麼可愛我獨自升級怪獸8號謝坤達IVE (組合)與鳳行關於我轉生變成史萊姆這檔事角色列表黃道十二宮福建號航空母艦虽然不是英雄葉乃文五月天張員瑛草榴社区張文傑2024年花蓮地震极光香緹·摩爾迷宮飯呂家愷搜查班長1958日本劉德華海莉·鮑德溫蕭景鴻越位 (足球)葬送的芙莉蓮周處除三害 (電影)毛泽东願榮光歸香港林峯周雨彤伍允龍羅毓儀香港Baike: 分類索引沒有秘密猩球崛起:終極決戰角質層唐振剛柯佳嬿文化大革命