範例sum = 0; for (i=0; i<=10; i++) sum = sum + i; sum = 0; foreach (i in 1..10) sum = sum + i; for (i=1; i<=9; i++) for (j=1; j<=9; j++) println(i, "*", j, "=", i*j); use c3.windows; // 加入 windows 的領域知識。 if Create a Control, then add the Control into it's Parent. // 做法 : redefine Control.new() to Controls.add(Control.new()); translate EditorMenu.c3 (C3) to EditorMenu.cs (C#) class Editor : Window { String file = ""; TextBox textBox = new TextBox(); FileMenu FileMenu1 = new FileMenu(); Editor() { add(file1); add(TextBox); } } class stack { items = [] push(o) { items.append(o); } pop() { return items.removeLast(); } } #include rewrite(Matrix) { a = 1 2] [3 4; b = 4 3] [2 1; c = a * b * a'; } expand { a = new Matrix(1 2] [3 4); b = new Matrix(4 3] [2 1); c = a.mult(b).mult(a.transpose()); } 設計原則1. Member Function 就是零個參數的 Member 。 2. foreach (o in c) { ... } 3. XXX a.b().c >> var; f(var) ; XXX 4. Object obj id { obj id=new() {..} obj id; ... } 5. try {...} catch (...)? {...}; 6. Anonymous Typing : var person = new {FirstName = "John", LastName = "Smith"} C3 : BNF Syntaxkeywords = if, for, while, else, foreach, class, return, yield, rename, null, and, or, not, public, private, protected, static, new baseType = int, float, byte, char, string, pre_op1 = + - ! op2 = + - << >> && || and or op2mul = * / post_op1 = ++ -- assign_op= = <- -> pair = { } [ ] ( ) attribute= public ,private, protected, static types = id, number, string BNF FIRST FOLLOW PROG = BASE_LIST FIRST(BASE) \0 BASE_LIST = { BASE } FIRST(BASE) FOLLOW(BASE) BASE | IF | FOR | FOR_EACH | WHILE | TRY FIRST(BASE) } \0 | RETURN | YIELD | RENAME | BLOCK | CLASS | OBJ | METHOD | INC ; | EXP_LIST ; | ASSIGN ; IF = if (EXP) BASE { else IF } [else BASE] if FOLLOW(BASE) FOR = for (ASSIGN; EXP; INC) BASE for FOLLOW(BASE) FOR_EACH= foreach (id in EXP) BASE foreach FOLLOW(BASE) WHILE = while (EXP) BASE while FOLLOW(BASE) TRY = try BLOCK { catch '(' MEMBER ')' BLOCK } try FOLLOW(BASE) BLOCK = '{' BASE_LIST '}' { FOLLOW(BASE) CLASS = class id is MEMBER BLOCK class FOLLOW(BASE) OBJECT = MEMBER [id] BLOCK id id FOLLOW(BASE) METHOD = MEMBER id '(' EXP_LIST ')' BLOCK id ( FOLLOW(BASE) INC = MEMBER OP_INC id ) ; ASSIGN = MEMBER_LIST = EXP_LIST id = ; MEMBER_LIST = [MEMBER] { , MEMBER } id = EXP_LIST= [EXP] { , EXP } FIRST(EXP) ) ; EXP = PRE_OP1 MEXP | MEXP { OP2 MEXP} number string id PRE_OP1 ( POST_OP1 ) ; , MEXP = ( EXP ) | ITEM { OP2_MUL ITEM } number string id ( OP2 ) ; ITEM = MEMBER | CALLS | LIST number string id OP2_MUL ) ; | number | char | string ORDER = CALLS | MEMBER | number | char LIST = '[' { ITEM } ']' RANGE = ITEM .. ITEM CALLS = ONE_CALL { . ONE_CALL } id POST_OP1 OP2 ) ; ONE_CALL= id ['(' EXP_LIST ')'] Preprosessor MODULE = module [\w.]* '{' [^\{]? '}' INCLUDE = include [\w.]*; REWRITE = rewrite [\w.]* '{' RULE_LIST '}' RULE_LIST = RULE { ; RULE } RULE = '{' regexp => toexp } 參考文獻 |
|||||
作者:陳鍾誠 E-mail:ccc@kmit.edu.tw - 歡迎複製、修改、但作品必需上網分享給大家。 ![]() 本著作係採用創用 CC 「姓名標示─相同方式分享 2.5 台灣版」授權條款釋出。 免費電子書 | 程式百科 | 大學課程網 | 手機入口網 | 百川搜尋網 |