130 likes | 298 Views
Статический анализатор для языка ECMA Script 4. Власов В. А. Мат.-мех. Ф-т. Языки ECMA Script 4 . JavaScript 2 (Mozilla) ActionScript 3 (Adobe) class Greeter implements Greetings { public function hello() { print(“hello, world”) } public function goodmorning() {
E N D
Статический анализатор для языка ECMA Script 4 Власов В. А. Мат.-мех. Ф-т.
Языки ECMA Script 4 • JavaScript 2 (Mozilla) • ActionScript 3 (Adobe)class Greeter implements Greetings { public function hello() { print(“hello, world”) } public function goodmorning() { print(“goodmorning, world”) } }
ECMA: Variables • var x = 10 • const PI = 3.1415 • var x: Shape • var x: Shape = new Shape
ECMA: Functions • Как статические функции.function hello() { print(“hello, world”)}hello() • Как методы классовpublic class Greeter { public function hello() { print(“hello, world”) } } • Анонимные функцииfunction (x: Integer, y: Integer) : Integer { return x + y }
ECMA: Classes,Interfaces interface Greetings { function hello() function goodmorning() } class Greeter implements Greetings { public function hello() { print(“hello, world”) } public function goodmorning() { print(“goodmorning, world”) } } var greeter : Greetings = new Greeter() greeter.hello()
ECMA: Прототипы • У каждого объекта есть прототип • Прототип подкласс класса dynamic class Object class A { prototype var x : int = 10 } var a1 = new A; var a2 = new A; trace(a1.x); trace(a2.prototype.x); var p1: Object; p1.prototype = a1; trace(p1.x); trace(p1.prototype.x); class A { prototype var f = function() { trace("A.f") } // prototype function g() { trace("A.g") } // не разрешено }
ECMA: Dynamic • Расширение экземпляра класса с добавлением дополнительных полейdynamic class A { var x : String; var y; } var a : A = new A print(a.x) // null print(a.y) // undefined print(a.z) // undefined a.y = 10 a.z = 20 print(a.y) // 10 print(a.z) // 20
ECMA: Анонимные классы class A { var x function A() { this.x = 10 } function m() { trace(this.x) } } var a = new A() var o = { x : 20 } o.m = a.m o.m() // traces 10
ECMA: Class Members • Fieldsclass A {var __x : Integer;} • Methodsclass A {public function sum(x, y) : integer { return x + y; } • Property Emulationclass A {var __x : Integer;public function get x() {return __x;} public function set x(v) { __x = v;}
ECMA: Packages package actors { public class Greeter { public function hello() { print(“hello, world”) } } } import actors.Greeter var greeter : Greeter = new Greeter greeter.hello()
ECMA: Namespaces package actors { public namespace English public namespace French public class BilingualGreeter { English function hello() { print("hello, world") } French function hello() { print("bonjour, le monde") } } } import actors.* var greeter : BilingualGreeter = new BilingualGreeter use namespace English greeter.hello() greeter.French::hello()
Статический анализ • Слаботипизированный язык. • Проверка типов только во время исполнения. • Функциональные переменные.
Решение • Ecplipse plug-in: • Parser • Частичные интерпретатор • Find Usages • Проверка типов (статический анализ) • Refactoring tool: • Inline Variable • Introduce Variable • Rename