Nuva

Nuva語言是一種面向對象的動態腳本語言。Nuva對應漢語女媧一詞。女媧是中國上古時代的神話傳說人物。

基本介紹

語言概述:,設計目的,設計特點,主要套用,語言特點,語法簡單靈活,動態無約束,支持面向對象,自動垃圾回收,模板專用元素,虛擬機特點,內置了正則表達式引擎,內置了 O/R Mapping 引擎,內置了基於HTML/XML 的界面引擎,代碼示例,Hello, Nuva!,foreach | O/R Mapping,file | 生成檔案,assign | 捕獲輸出,函式 | 遞歸調用,類 | 多態性,

語言概述:

設計目的

Nuva語言的設計目的是用於基於模板代碼生成。除了用於代碼生成領域外,Nuva語言也能用於開發應用程式,如文本和數據處理、GUI應用程式等。
Nuva (女媧) 語言是一種面向對象的動態腳本語言 ( Scripting Language ) ,它的設計目的是用於基於模板的 ( Template Based ) 代碼生成 ( Code Generation )。除了用於代碼生成 ( Code Generation ) 領域外,Nuva (女媧) 語言也能用於開發應用程式,如文本和數據處理、GUI 應用程式等。
Nuva (女媧) 語言的設計目的是用於基於模板的 ( Template Based ) 代碼生成 ( Code Generation ) ,因此 Nuva (女媧) 語言中包含了專門用於模板的語言元素,編寫模板更為靈活方便。
Nuva (女媧) 虛擬機內置了正則表達式引擎,能夠方便的進行文本處理。
Nuva (女媧) 虛擬機內置了 O/R Mapping ( Object-Relation Mapping ) 引擎,您可以通過面向對象的方式直接存取資料庫架構和數據。
Nuva (女媧) 虛擬機內置了基於 HTML/XML 的界面引擎,能夠方便的編寫 GUI 應用程式 ( Macrobject CodeAuto 就是用 Nuva 語言編寫的)。

設計特點

我們在開發 XObject、CodeAuto、HelpAuto、WebAuto、AppAuto 等產品的時候,需要一種基於模板的代碼生成工具。在考察了一些生成工具以後,發現它們的模版技術不夠簡便,因此我們決定自己來實現它。起初我們的模版採用一種簡單的標記技術,並實現了我們的第一個版本的生成工具。然後這種標記技術得到擴展,變得非常像一門新的語言,我們決定對其進行規範化,於是就有了 Nuva。
Nuva 語言的設計目的就是用於基於模板代碼生成,因此我們決定這門新的語言要有如下特點:
l 語法簡單靈活;
l 動態的,無類型約束;
l 支持面向對象;
l 自動垃圾回收;
l 內置 O/R Mapping 支持;
l 模版專用的語言元素.

主要套用

Nuva 除了用於代碼生成外,也能用於開發應用程式,如文本和數據處理、GUI 應用程式等。
l 支持正則表達式,能夠方便的進行文本處理。
l 內置 O/R Mapping 引擎,能夠簡便的存取關係數據。
l 基於 HTML/XML 的界面引擎,能夠方便的編寫 GUI 應用程式。

語言特點

語法簡單靈活

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語言特有的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 引擎

Nuva虛擬機內置了 O/R Mapping 引擎,可以通過面向對象的方式直接存取資料庫架構和數據。

內置了基於HTML/XML 的界面引擎

Nuva虛擬機內置了基於 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
.>

相關詞條

熱門詞條

聯絡我們