Skip to content

Latest commit

 

History

History
90 lines (67 loc) · 2.29 KB

CHANGELOG.md

File metadata and controls

90 lines (67 loc) · 2.29 KB

Changelog

Full Changelog

  1. 新增可分析 while 敘述功能(測試中)
  2. 新增 examples/WhileTest.py

Full Changelog

  1. 修正 python boolOp 轉換成 big-O AST 時出現的錯誤
  2. 新增 examples/WhileTest.c

Full Changelog

  1. 支援 for node 中 target node 可以放入 tuple/list,例如:
for a, b in k:
    pass
  1. 支援 for node 中 iter node 可以放入 attribute,可支援的語法以ENBF表示為:
ITER ::= CALL | NAME | ATTRIBUTE ;

CALL ::= NAME , '(' , ARGS , ')' ;

ARGS ::= ARG , { ',' , ARG } ;

ARG ::= CALL | NAME | ATTRIBUTE ;

ATTRIBUTE ::= VALUE , '.' , ATTR ;

VALUE ::= NAME | ATTRIBUTE ;

ATTR ::= CALL | NAME ;

NAME ::= id ;

// ::= 表示 左式可被展成右式
// {} 內的元素可以可以省略或重複出現
// | 表示 或
  1. 修正一些 bugs

Full Changelog

  1. 修正無法分析 a ** b (a的b次方)的語法。

  2. 支援各種置於 For statemnt 中 itertation 節點的 function call

import math
def module16():
    result = []
    for i in dir(math):
        if 'exam' in i:
            result.append(i)
    print(result)
這樣的程式經過時間複雜度分析後可以得到
{
    "compilation node": "O(1)",
    "module16": "O(#dir(math))"
}
輸出結果為了避免跟計算dir(math)所需的時間複雜度搞混,
在 function 前面加一個#表示這個 function output 的 list 或是 tuple 的大小。

可支援的 function call 以 EBNF 來表示
FUNCALL ::= CALL | ATTRIBUTE ;

CALL ::= NAME , '(' , ARGS , ')' ;

ARGS ::= ARG , { ',' , ARG } ;

ARG ::= CALL | NAME | ATTRIBUTE ;

ATTRIBUTE ::= VALUE , '.' , ATTR ;

VALUE ::= NAME | ATTRIBUTE ;

ATTR ::= CALL | NAME ;

NAME ::= id ;

// ::= 表示 左式可被展成右式
// {} 內的元素可以可以省略或重複出現
// | 表示 或