nhom2 domain specific language development
DESCRIPTION
,TRANSCRIPT
1
ĐẠI HỌC QUỐC GIA HÀ NỘI
TRƯỜNG ĐẠI HỌC CÔNG NGHỆ
BAO CAO NGHIÊN CƯU KHOA HỌC
ĐÊ TAI: DOMAIN-SPECIFIC LANGUAGE DEVOLOPMENT
Giang viên hương dân : Đăng Đưc Hanh
Thưc hiện: Nguyên Manh Hung
Đoan Việt Hưng
Hà Nội, ngay …. tháng … năm 2015
2
MUC LUC I.Ngôn ngư la gi? Domain-Specific Language(DSL) va Genaral-purpose language(GPL) ................................................................................................... 3
1.Khái niệm ngôn ngư ................................................................................ 6 2.So sánh GPL và DSL ............................................................................... 6
a.Ví dụ về GPL ........................................................................................ 6 b.Ví dụ về DSL ........................................................................................ 7 c.So sánh GPL và DSL ............................................................................ 7
II. Domain-Specific Language – Ngôn ngư miền chuyên biệt ............................. 8 1.Định nghĩa ............................................................................................... 8 2.Lơi ich ..................................................................................................... 8 2.1. Hiệu suất ............................................................................................. 9 2.2. Giao tiêp .............................................................................................. 9 3. Han chê va chi phi .................................................................................. 9 4.Cấu truc DSL ......................................................................................... 10
4.1.Abstract Syntax(Cú pháp trừu tương) .............................................. 10 4.2.Concrete Syntax(Cú pháp cụ thể) .................................................... 10 4.3.Semantics(ngư nghĩa) ..................................................................... 10
5.Phân loai DSL ......................................................................................... 11 5.1.Định nghĩa EXTERNAL DSL – INTERNAL DSL ................................ 11 5.2.So sánh Internal và External ............................................................ 12
6.Mô hinh xư ly DSL ................................................................................. 13 III. Phat triển ngôn ngư miền chuyên biệt ......................................................... 14
Quá trình phát triển DSL ........................................................................... 14 a.Lưa chon ............................................................................................ 14 b.Nghiên cứu ......................................................................................... 14 c.Thiêt kê ............................................................................................... 14 d.Thưc hiện ........................................................................................... 14 e.Thâm định .......................................................................................... 15
IV.Các phần mềm phát triển DSL ...................................................................... 15 1.XTEXT ................................................................................................... 15
a.Định Nghĩa.......................................................................................... 15 b.Môt sô tinh năng: ................................................................................ 15
2.XTEND .................................................................................................. 17 3.EMFTEXT .............................................................................................. 21 4.GMF - Graphical Modeling Framework .................................................. 21
V.Tham khao..................................................................................................... 22
3
LỜI MƠ ĐÂU
DSLs đã xuất hiện 1 thời gian dai nhưng phai đên vai năm gần đây,DSLs
mới danh đươc nhiều sư quan tâm. Môt vai năm gần đây, Java la 1 trong
nhưng ngôn ngư của tương lai va ngay ca khi Microsoft đưa ra thach thức
với C #, nhưng no vẫn là môt ngôn ngư kha tương tư java. Có nhiều thông tin
logic không thể biểu diên bơi cac ngôn ngư đo,điều đo la cơ sơ cho sư gia
tăng nhanh chong của XML. Ho mong muôn có môt ngôn ngư cho phép ban
định nghĩa từ vưng của ban và cung cấp môt cấu trúc manh hơn.Nhưng
nhiều người phan nan cac dấu ngoặc lam kho chịu. Ho mong muôn co đươc
nhưng lơi ích của XML mà không cần tôn chi phí quá nhiều như. Lập trinh
viên không co đủ kỹ năng cung như kỹ thuật về DSL để sư dụng no môt cach
hơp ly. Đo la ly do ma nhom chung em quyêt định nghiên cứu đề tai nay.
Mặc du chung em đã co nhiều cô găng trong qua trinh nghiên cứu nhưng
do kiên thức con nhiều han chê va chưa co nhiều kinh nghiệm nên kho tranh
khoi nhưng thiêu sot. Chung em rất mong nhận đươc nhưng y kiên đong gop,
phê binh của quy thầy cô va cac ban. Đo se la hanh trang quy gia giup
chung em hoan thiện kiên thức của minh sau nay.
4
DANH MUC CAC CHƯ VIÊT TĂT
KY HIÊU VIÊT TĂT CHƯ VIÊT ĐÂY ĐU
DSL DOMAIN – SPECIFIC LANGUAGE
GPL GENERAL – PURPOSE LANGUAGE
5
DANH MUC HINH ANH
Hinh 1. Abtract Syntax ................................................................................. 10 Hinh 2.Vi dụ External DSL ............................................................................ 11 Hinh 3.Vi dụ Internal DSL ............................................................................ 12 Hinh 4.Mô hinh xư ly DSL............................................................................ 13 Hinh 5.Xtext ................................................................................................. 15 Hinh 6.Vi dụ sư dụng Xtext .......................................................................... 16 Hinh 7.Phân tich cu phap ............................................................................ 16 Hinh 8.Sinh cac thanh phần cơ ban của ngôn ngư ...................................... 19 Hinh 9.EMFText ........................................................................................... 21
6
I.Ngôn ngư la gi? Domain-Specific Language(DSL) va Genaral-purpose language(GPL)
1.Khái niệm ngôn ngư
Ngôn ngư là hệ thông kí hiệu bao gồm: âm, từ và nhưng quy tăc
kêt hơp các từ đươc sư dụng lam phương tiện để giao tiêp với nhau
trong môt công đồng.
Vi dụ: Tiêng Việt, tiêng Anh la hai ngôn ngư khác nhau
Ngư pháp là quy tăc chủ yêu trong cấu trúc ngôn ngư. Mỗi ngôn
ngư có môt ngư pháp riêng biệt của nó.
VD: Chủ ngư + Vị ngư.
Từ khái niệm ngôn ngư trên ta có thể chia ngôn ngư trong khoa
hoc máy tính ra làm 2 loai chính là ngôn ngư có mục đich chung(GPL)
và ngôn ngư miền chuyên biệt(DSL)
2.So sánh GPL và DSL
a.Ví dụ về GPL
GPL là ngôn ngư có mục đich chung, môt ngôn ngư lập trinh đươc thiêt kê
để đươc sư dụng cho việc viêt phần mềm trong môt loat cac lĩnh vưc ứng
dụng.Môt sô GPL rất phổ biên hiện nay như C,C++,Java,PHP…
- Java
class HelloWorldApp {
public static void main(String[] args) {
System.out.println("Hello World!"); }
}
- C
#include <stdio.h>
int main(void)
{
printf("hello, world\n");
7
}
b.Ví dụ về DSL
DSL là ngôn ngư miền chuyên biệt,1 sô DSL quen thuôc chúng ta có thể kể
đên như SQL,HTML…
- SQL
CREATE TABLE Employee (
id INT NOT NULL IDENTITY (1,1) PRIMARY KEY,
name VARCHAR(50),
surname VARCHAR(50),
address VARCHAR(255),
city VARCHAR(60),
telephone VARCHAR(15),
)
- HTML
<html>
<head>
<title>Example</title>
</head>
<body>
<p>Example</p>
</body>
</html>
c.So sánh GPL và DSL
GPL
DSL
Miền Rông và phức tap Nho và dê định nghĩa
Kich thước ngôn ngư Lớn Nho
8
Tuổi tho Vai năm đên vài chục
năm
Vai thang đên vai năm
Công đồng sư dụng Rông Nho
Sư phát triển Nhanh Chậm
II. Domain-Specific Language – Ngôn ngư miền chuyên biệt
1.Định nghĩa
Môt ngôn ngư miền chuyên biệt (DSL) là môt ngôn ngư lập trinh
máy tính chuyên vào môt miền ứng dụng cụ thể. Ngôn ngư nay co mục
đich đặc biệt trai ngươc với cac ngôn ngư co mục đich chung (GPL).
No mô ta vấn đề ơ mức trừu tương cao hơn. DSL giup giai quyêt môt
cách hiệu qua toàn bô môt lớp các vấn đề tương tư nhau. Ta co thể
biểu diên băng textual (văn ban) hay graphical (đồ hoa)
Ranh giới giưa GPL và DSL không thưc sư ro rang.Ví dụ như 1
giao diện lập trình ứng dung lưu loat (Fluent API) đươc viêt bơi GPL
như C#,Java cung co thể coi là môt DSL
2.Lơi ich
DSL đem lai rất nhiều lơi ich trong việc phat triển cac dư an phần mềm
như:
- Tăng hiệu suất
- Tang chất lương phần mềm
- Dê thâm định
- Dê kiểm định
- Tăng kha năng giao tiêp giưa người lập trinh,người sư dụng cung như
các chuyên gia về miền
- Chi phi thấp
- Ngôn ngư DSL có thể chay ơ nhiều nền tang khac nhau
Co 2 lơi ich chinh ma chung ta cần phai chu y va cân nhăc để sư dụng DSL
9
2.1. Hiệu suất
Nhờ việc sư dụng cac khai niệm ơ mức trừu tương cao hơn nên
no đem lai cai nhin ro hơn về vấn đề. Cac dong Code suc tich, dê đoc,
it lỗi, dê bao tri. Khi cần, co thể sưa đổi hệ thông môt cach dê dang.
Đồng thời cac lập trinh viên cung không con phai viêt nhưng dong code
lặp đi lặp lai nham chan nưa ma se tập trung vao cac phần thu vị hơn
va cung se tiêt kiệm thời gian để viêt nhưng phần code chung giông
nhau.
2.2. Giao tiêp
Nhiều y kiên cho răng phần kho nhất khi phat triển môt dư an
phần mềm đo la giao tiêp với khach hang va người sư dụng. Băng cach cung
cấp môt ngôn ngư chinh xac, ro rang , co thể sư dụng như môt phương thức
giao tiêp thi chung ta co hoan toan cai thiện vấn đề nay.
DSL giup tăng cường kha năng giao tiêp với cac chuyên gia về
miền. Nhưng chuyên gia nay không trưc tiêp viêt mã xây dưng DSL
nhưng ho co thể dê dang đoc va hinh dung đươc y nghĩa của cac câu
lệnh va hiểu hệ thông đang lam gi. Ho co thể dê dang chi ra nhưng lỗi,
giup cac lập trinh viên cai thiện hệ thông thậm chi la ca DSL. Nhiều
người thậm chi con xây dưng môt DSL chi để mô ta hệ thông miền,
dung như môt khuôn mẫu để giao tiêp ma không cần cai đặt. Đây la
môt lơi ich vô cung to lớn va thiêt thưc của DSL.
3. Han chê va chi phi
Lý do duy nhất để ban không sư dụng DSL là ban không thấy đc lơi ích
của DSL với ban hay ít nhất ban k thấy đc gia trị khi xây dưng DSL.Không dê
dang để lam quen với môt ngôn ngư mới. Moi người cung chưa quen thuôc
với cach xây dưng 1 DSL và làm thê nao để nó phù hơp vs việc phát triển
phần mềm hiện nay. Ngoai ra, nhiều vấn đề về dsl xuất phát từ việc nhầm lẫn
giưa dsl với model. Môt vấn đề nưa đo la việc kho tich hơp DSL với cac hệ
thông hoặc ngôn ngư khac(so với việc tích hơp với môt GPL).
Chi phi ơ đây bao gồm chi phi của việc thiêt kê, thưc hiện cai đặt va duy
tri, bao tri môt ngôn ngư miền cụ thể cung như yêu cầu các công cụ để phát
triển nó (IDE). Việc tìm kiêm, thiêt lập, duy trì pham vi thích hơp. Kho khăn
trong việc cân băng thương mai giưa dsl va gpl. Chi phi gia tăng từ việc hoc
dsl là khá nho so vs việc hiểu các model. Thật vây,ngôn ngư dsl giúp dê dãng
HTML
<html>
<head>
<title>Example</title>
</head>
<body>
<p>Example</p>
</body>
</html>
10
hơn để hiểu và thao tác các mô hình,có 1 dsl se làm giam chi phí hoc tập sư
dụng model. Nhưng chung ta cung cần cân nhăc giưa chi phi của việc hoc
môt ngôn ngư mới so với áp dụng nó
4.Cấu truc DSL
4.1.Abstract Syntax(Cú pháp trừu tương)
Mô ta cấu trúc của ngôn ngư và cách thức kêt hơp của cac thanh phần,
đôc lập không phụ thuôc vao bất cứ đai diện cụ thể nao
Hinh 1. Abtract Syntax
4.2.Concrete Syntax(Cú pháp cụ thể)
- Mô ta cụ thể môt đai diện của ngôn ngư mô hình
Ví dụ
Var x:int;
calc y: int = 1 + 2 * sqrt(x)
4.3.Semantics(ngư nghĩa)
- Mô ta y nghĩa của các yêu tô xac định trong ngôn ngư va y nghĩa của
cac cach khac nhau để kêt hơp chúng
11
5.Phân loai DSL
5.1.Định nghĩa EXTERNAL DSL – INTERNAL DSL
- Môt external DSL la DSL tach biệt hoan toan với ngôn ngư lập trinh
chinh với cu phap va môi trường riêng.
Hinh 2.Vi du External DSL
DSL
Grammar
DSL
Text
conforms to
DSL
Text
Internal DSL 1
Internal DSL 2
Host Language
12
- Môt internal DSL la môt DSL năm bên trong môt ngôn ngư co mục đich
chung (GPL). Sư dụng môt sô tinh năng của GPL theo môt cach đặc
biệt để xư ly môt vấn đề nho. Kiểu ngôn ngư nay bị giới han ca về cấu
truc lẫn cu phap quy định bơi ngôn ngư chủ.
Hinh 3.Vi du Internal DSL
Điều gì làm cho môt internal DSL khác môt API binh thường?
VD: Ruby cung đã phat triển ngôn ngư DSL kha manh: Nhiều thư
viện của Ruby đi theo phong cach của DSL. Đặc biệt, framework nổi
tiêng nhất của ruby, Rails, thường đươc xem như la môt bô sưu tập các
DSL.
5.2.So sánh Internal và External
Internal
- Lập trinh đơn gian hơn
- Nhưng sư dụng khá han chê
External
- Sư dụng linh hoat hơn
- Lập trình khá phưc tap
- Dê thich nghi với nhiều ứng dụng
13
6.Mô hinh xư ly DSL
Hinh 4.Mô hinh xư ly DSL
Để xư lý môt ngôn ngư DSL,đầu tiên phai xây dưng kịch ban DSL sau khi
phân tích cú pháp ta se đươc mô hình ngư nghĩa từ đo co thể dung để sinh
mã nguồn tư đông tuy thuôc mục đich sư dụng
14
III. Phat triển ngôn ngư miền chuyên biệt
Quá trình phát triển DSL
Hinh 5. Phân tich miên
a.Lưa chon
- Tao mới hoặc tái sư dụng miền đã co
- Cho phép người dùng không có kỹ thuật tham gia
b.Nghiên cưu
- Xac định miền của vấn đề
- Thu thập kiên thức về miền từ người dung.
- Mô hình hoa Domain: Pham vi, từ vưng, các khái niệm
c.Thiêt kê
- Xac định các thành phần DSL (cú pháp trừu tương và cụ thể, ngư
nghĩa)
- Quyêt định phương phap tôt nhất để cai đặt các ngôn ngư
d.Thưc hiện
- Phát triển các thành phần DSL (Xtext, EMFText, GMF,...)
- Nêu no đươc thưc thi, phát triển các trinh thông dịch hoặc trình biên
15
dịch tương ứng
e.Thâm định
- Kiểm tra ngôn ngư
- Thâm định ngôn ngư với người dùng cuôi
IV.Các phần mềm phát triển DSL
1.XTEXT
a.Định Nghĩa
- La môt Framework hỗ trơ phat triển DSL văn ban theo hướng ngư
phap.
- Là môt phần của dư án Eclipse Modeling
- Mô ta cu phap cụ thể
- Dưa trên bô phân tich cu phap.
b.Một sô tinh năng:
- Tuy chinh mau săc cu phap
- Hỗ trơ khi biên tập code
- Tìm và sưa lỗi nhanh
- Tương thich với JVM
- Tích hơp với các công cụ Eclipse khác
Hinh 5.Xtext
Môt ví dụ về xây dưng ngư pháp trong etext.
Xây dưng ngư pháp về 1 lời chào(greeting) bao gồm từ “Hello” va 1
tên(name) có kiểu dư liệu là ID và cuôi câu là 1 dấu chấm than (‘!’).
16
Hinh 6.Vi du sư dung Xtext
Trong file test,chung ta đã xây dưng đươc 2 câu chao đo la “Hello world!”
va “Hello Hung!”.Câu “Hello abc” bao lỗi do không thưc hiện đung ngư
pháp(thiêu dấu chấm than(‘!’)).
Hinh 7.Phân tich cu phap
17
2.XTEND
Có thể sư dụng để sinh mã java tư đông cho Xtext. Sau đây la môt vi
dụ sư dụng Xtend:
Bước 1: Xây dưng ngư phap cho ngôn ngư của ban
Ơ đây chung ta xây dưng môt ngư phap cho môt DSL mô hinh hoa
thưc thể va cac tinh của no
Luật đầu tiên luôn đươc sư dụng để mơ đầu
No quy định răng ‘Domainmodel’ chứa môt sô lương tuy y ‘Types’
đươc thêm vao tinh năng ‘elements’
Luật Type quy định type co thể la kiểu DataType hoặc môt thưc thể
Entity
18
Luật DataType băt đầu băng từ khoa ‘datatype’, theo sau la môt định
danh đươc phân tich cu phap bơi luật ID. Luật ID đươc định nghĩa
trong org.eclipse.xtext.common.Terminals. Gia trị tra về khi goi luật ID
đươc gan cho ‘name’
Luật Entity băt đầu băng từ khoa ‘entity’ theo sau bơi môt ‘name’ tương
tư như trên.
Tiêp theo đo, co môt mệnh đề mơ rông đươc đặt trong ngoặc đơn va
bên canh la dấu ‘?’ nghĩa la tuy chon không băt buôc. Khi ‘superType’ tham
chiêu tới môt ‘Entity’ thi luật nay không thưc sư đươc goi ơ đây, chi co luật
ID đươc thưc thi. Luật ‘Entity’ đươc tham chiêu chi thưc sư thưc thi trong
qua trinh liên kêt. Cuôi cung la ơ giưa hai dấu ngoặc nhon la môt sô tuy y cac
‘Features’ đươc định nghĩa sau đây
Từ khoa ‘many’ đươc sư dụng để thể hiện môt tinh năng đa trị. Toan tư
‘?=’ chi ra răng tinh năng ‘many’ thuôc kiểu boolean
Tom lai, ngư phap trên sư dụng gần như tất ca cac khai niệm quan
trong trong ngư phap của Xtext. Để sư dụng ngôn ngư trên ta phai tao ra cac
19
thanh phần cơ ban của no.
Hinh 8.Sinh cac thanh phân cơ ban cua ngôn ngư
Bước tiêp theo ta sư dụng IDE tich hơp vừa đươc tao ra cho ngôn ngư
của chung ta để biên tập code. Tao môt file mới với phần mơ rông la tên của
DSL ma chung ta vừa tao ơ trên sau đo sư dụng ngôn ngư mới để biểu diên
miền.
20
Cuôi cung la dung Xtend viêt môt công cụ sinh mã nguồn. Tim file
DomainmodelGenerator.xtend trong goi org.example.domainmodel.generator
va sưa nôi dung thanh như sau
Chi cần vao project viêt băng DSL phia trên va tao môt folder mới mang
tên ‘src-gen’ la Xtend se tư đông sinh cac file va nôi dung bên trong đươc quy
21
đinh trong file DomainmodelGenerator.xtend phia trên
Vi dụ: HasAuthor.java
3.EMFTEXT
- La môt framework hỗ trơ phat triển DSL dang văn ban theo hướng mô
hinh.
- Phat triển như môt trinh hỗ trơ tich hơp trong Eclipse
- Tinh năng chinh:
- Tuy chinh mau săc cu phap
- Hỗ trơ khi biên tập code
- Tìm và sưa lỗi nhanh
- Cơ chê sưa lỗi tham chiêu
Hinh 9.EMFText
4.GMF - Graphical Modeling Framework
- La môt framework phat triển trinh biên tập dang đồ hoa dưa trên EMF
va GEF theo hướng mô hinh
- La môt phần của dư an Mô hinh hoa Eclipse
22
- Công cấp bô công cụ sinh ra cac DSL tooling
- Tao môi trường thuận lơi cho việc phat triển DSL dang đồ hoa
V.Tham khao
[1] Martin Fowler. Domain Specific Languages, Addison-Wesley
Professional, 2010.
[2] Markus Voelter. DSL Engineering -- Designing, Implementing and
Using Domain-Specific Languages, 2013.
[3] Javier Luis Cánovas Izquierdo. Domain-specific Languages, 2013.
[4]XTEXT–Documentation
<https://eclipse.org/Xtext/documentation/index.html>