Tải bản đầy đủ (.doc) (26 trang)

ĐỒ ÁN CƠ SỞ 5 ĐỀ TÀI: XÂY DỰNG NGÔN NGỮ LẬP TRÌNH ĐƠN GIẢN. TS. VÕ NGỌC ĐẠT

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (644.52 KB, 26 trang )

TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN VÀ TRUYỀN
THÔNG VIỆT -HÀN

KHOA KHOA HỌC MÁY TÍNH

ĐỒ ÁN CƠ SỞ 5
ĐỀ TÀI: XÂY DỰNG NGƠN NGỮ LẬP TRÌNH ĐƠN GIẢN

Sinh viên thực hiện : ĐỖ VĂN CHIẾN
Giảng viên hướng dẫn : TS. VÕ NGỌC ĐẠT
Lớp
: 18IT2

Đà nẵng, tháng 05 năm 2021


ĐẠI HỌC CÔNG NGHỆ THÔNG TIN VÀ TRUYỀN THÔNG
VIỆT-HÀN
KHOA KHOA HỌC MÁY TÍNH

ĐỒ ÁN CƠ SỞ 5
XÂY DỰNG NGƠN NGỮ LẬP TRÌNH ĐƠN GIẢN

Đà Nẵng, tháng 05 năm 2021


MỞ ĐẦU
Trong thời đại hiện nay cuộc sống đang chuyển đổi theo xu hướng hiện đại
hóa, cơng nghiệp hóa. Trong đó ngành Cơng nghệ thơng tin là một ngành nghệ
tất yếu, hỗ trợ đắc lực cho quá trình chuyển đổi số này. Bằng những câu lệnh
ngững lập trình viên có thể tạo ra rất nhiều thư hỗ trợ và nâng tầm cuộc sống


hiện đại. Từ ứng dụng trò chơi giải trí đến, ví điện tử, các thiết vị gia dụng thơng
minh,…Vậy mới thấy việc lập trình đóng góp to lớn như thế nào, từ đó các ngơn
ngữ lập trình dần dần được ra đời để hỗ trợ các lập trình viên có thể dễ dàng tạo
ra các sản phẩm cơng nghệ phục vụ cuộc sống.


LỜI CẢM ƠN
Báo cáo đồ án này là quá trình nghiên cứu và thực hiện của tôi dưới sự giúp đỡ, hỗ
trợ của rất nhiều người người.
Lời đầu tiên tôi xin chân thành cảm ơn THS. Võ Ngọc Đạt đã trực tiếp giúp
đỡ tơi tìm hiều và nghiên cứu thực hiện đề tài, cung cấp tài liệu, thông tin cần thiết
cho báo cáo này.
Xin cảm ơn ban lãnh đạo trường Đại học Công nghệ thông tin và Truyền thông
Việt Hàn, khoa Khoa học máy tính đã tạo điều kiện cho tơi thực hiện đồ án của mình.
Cuối cùng tơi xin chân thành cảm ơn gia đình, người thân và bạn bè đã luôn bên
cạnh ủng hộ, động viên trong suốt q trình tơi thực hiện đồ án 5.
Tơi xin chân thành cảm ơn!


NHẬN XÉT
(Của giảng viên hướng dẫn)
……………………………………………………………………………………
……………………………………………………………………………………
……………………………………………………………………………………
……………………………………………………………………………………
……………………………………………………………………………………
……………………………………………………………………………………
……………………………………………………………………………………
……………………………………………………………………………………
……………………………………………………………………………………

……………………………………………………………………………………


MỤC LỤC
Trang
Chương 1 Giới thiệu........................................................................................10
1.1 Tổng quan...............................................................................................10
1.2 Phương pháp...........................................................................................10
1.3 Cấu trúc đồ án........................................................................................10
Chương 2 Tổng quan về lý thuyết..................................................................11
2.1 Ngôn ngữ lập trình là gì?........................................................................11
2.2 Các loại ngơn ngữ lập trình....................................................................11
2.2.1 Ngơn ngữ máy.................................................................................11
2.2.2 Hợp ngữ...........................................................................................11
2.2.3 Ngơn ngữ lập trình bậc cao..............................................................12
2.3 Các thành phần của một ngôn ngữ lập trình...........................................12
2.3.1 Bảng chữ cái....................................................................................12
2.3.2 Cú pháp............................................................................................12
2.3.3 Ngữ nghĩa........................................................................................12
2.3.4 Một số khái niệm khác.....................................................................12
2.4 Các bước xây dựng một ngôn ngữ lập trình...........................................13
2.4.1 Thiết kế ngơn ngữ............................................................................13
2.4.2 Xây dựng trình dịch ngơn ngữ.........................................................14
2.5 Ngơn ngữ lập trình Python.....................................................................17
Chương 3 Phân tích thiết kế hệ thống............................................................18
3.1 Thiết kế ngôn ngữ...................................................................................18
3.1.1 Ngữ pháp.........................................................................................18
3.1.2 Cú pháp............................................................................................19
3.2 Lựa chọn trình dịch và cơng cụ..............................................................20
Chương 4 Triển khai xây dựng.......................................................................21

4.1 Bộ phân tích từ vựng (Lexer).................................................................21
4.2 Bộ phân tích cú pháp (Parser).................................................................22
4.3 Bộ thơng dịch (interpreter).....................................................................23
Kết luận và hướng phát triển............................................................................25


DANH MỤC CÁC BẢNG
Trang
Bảng 1: Bảng so sánh trình biên dịch và trình thơng dịch....................................19


DANH MỤC HÌNH
Trang
Hình 1: Ngơn ngữ lập trình là gì?........................................................................13
Hình 2: Xây dựng ngữ pháp.................................................................................15
Hình 3: Trình biên dịch........................................................................................17
Hình 4: Các giai đoạn biên dịch...........................................................................18
Hình 5: Ngơn ngữ lập trình python......................................................................19
Hình 6: Ngữ pháp................................................................................................20
Hình 7: Expr, term, factor....................................................................................21
Hình 8: Lexer.......................................................................................................23
Hình 9: Mơ tả parser............................................................................................24
Hình 10: Parser....................................................................................................25
Hình 11: Interpreter.............................................................................................26


DANH MỤC CỤM TỪ VIẾT TẮT
STT
1


Cụm từ
Ngơn ngữ lập trình

Viết tắt
NNLT


Chương 1

Giới thiệu

1.1 Tổng quan
Hiện nay ngành công nghệ thông tin đang trở thành trợ thủ đắc lực cho quá
trình chuyển đổi số, nâng cao chất lượng cuộc sống cho con người. Chỉ bằng các
dịng lệnh các lập trình viên có thể tạo ra nhiều cơng cụ thơng minh trợ giúp con
người trong cuộc sống hàng ngày, từ những trò chơi giải trí, đến các thiết bị gia
dụng thơng minh.
Từ đó các ngơn ngữ lập trình cũng ngày càng phát triển để hỗ trợ các lập
trình viên có thể dễ dàng hơn trong quá trình lập trình. Với mong muốn có thể
phát triển được một ngơn ngữ lập trình “made in Viet Nam”, tôi thực hiện đồ án
này nhằm mục đích nghiên cứu cách tạo ra một ngơn ngữ lập trình, tạo tiền đề để
phát triển một ngơn ngữ lập trình hồn chỉnh trong tương lai.

1.2 Phương pháp
Để có thể tạo ra một ngơn ngữ lập trình những cơng việc chính mà chúng ta
cần làm đó là thiết kế được ngơn ngữ, sau đó là xây dựng trình biên dịch hoặc
thông dịch. Trong đồ án này tôi chọn xây xựng trình thơng dịch và sử dụng ngơn
ngữ python để thực hiện. Ngôn ngữ python là một ngôn ngữ rất thân thiện vì gần
giống với ngơn ngữ nói, nên sẽ thuận tiện hơn trong việc viết code.


1.3 Cấu trúc đồ án
Đồ án gồm có 3 chương chính như sau:
- Chương 2: Trình bày về các kiến thức liên quan đến đề tài như khái niệm
ngơn ngữ lập trình, phân loại, các thành phần, cũng như cách xây dựng
một ngôn ngữ lập trình
- Chương 3: Trình bay phần phân tích thiết kế hệ thống, thiết kế ngôn ngữ,
thiết kế ngữ pháp, cú pháp
- Chương 4: Trình bày các bước, xây dựng hệ thống


Chương 2

Tổng quan về lý thuyết

2.1 Ngơn ngữ lập trình là gì?

Hình 1: Ngơn ngữ lập trình là gì?

Ngơn ngữ lập trình (programming language) là dạng ngơn ngữ được chuẩn
hóa theo một quy tắc nhất định mà mỗi ngôn ngữ lập trình khác nhau sẽ có quy
tắc khác nhau. Nhằm một mục đích là giúp con người có thể giao tiếp với máy
móc, hay chính xác hơn là điều khiển máy móc làm theo ý mình.
Hiện nay có rất nhiều ngơn ngữ lập trình đang được sử dụng. Mặc dù các
ngơn ngữ cũng có điểm chung tương đồng nhưng mỗi ngơn ngữ lại có các cú
pháp sử dụng riêng. Cơng việc của các lập trình viên là họ phải học các quy tắc,
cú pháp và cấu trúc ngôn ngữ rồi thực hiện viết mã nguồn trong một trình soạn
thảo hoặc IDE và biên dịch code thành ngôn ngữ máy để máy tính có thể hiểu
được. Các ngơn ngữ script khơng u cầu trình biên dịch mà sử dụng các trình
thơng dịch để thực thi script.


2.2 Các loại ngôn ngữ lập trình
2.2.1 Ngơn ngữ máy
Ngơn ngữ máy – mã máy (machine language): là ngôn ngữ nền tảng của
bộ vi xử lý. Các chương trình được viết trong tất cả các loại ngôn ngữ khác cuối
cùng đều được chuyển thành ngôn ngữ máy trước khi chương trình đó được thi
hành. Các chỉ thị trong ngôn ngữ máy được biểu diễn dưới dạng mã nhị phân.
Đây là ngôn ngữ duy nhất mà bộ vi xử lí có thể nhận biết và thực hiện một cách
trực tiếp.
2.2.2 Hợp ngữ
Hợp ngữ (assembly language) là một ngơn ngữ lập trình bậc thấp, nó dùng
các từ viết tắt trong tiếng Anh để viết chương trình. Ví dụ: Input = nhập; add =
phép cộng; sub = phép trừ,.v.v..
Hợp ngữ đã từng được dùng rộng rãi trong tất cả các khía cạnh lập trình,
nhưng ngày nay nó có xu hướng chỉ được dùng trong một số lĩnh vực hẹp, chủ
yếu để giao tiếp trực tiếp với phần cứng hoặc xử lý các vấn đề liên quan đến tốc


độ cao. Điển hình như các trình điều khiển thiết bị, các hệ thống nhúng cấp thấp
và các ứng dụng thời gian thực.
Các nhược điểm: Chương trình cịn cồng kềnh, phức tạp, khó nhớ, cịn phụ
thuộc vào loại thiết bị (vi xử lý). Để thiết bị điện tử hiểu và thực thi được chương
trình, cần phải có cơng cụ hợp dịch để dịch từ hợp ngữ ra ngôn ngữ máy.
2.2.3 Ngơn ngữ lập trình bậc cao
Ngơn ngữ lập trình bậc cao (High-level programming language) là ngơn
ngữ lập trình có hình thức gần với ngơn ngữ tự nhiên, có tính độc lập cao, ít phụ
thuộc vào loại thiết bị (loại vi xử lý) cũng như các trình dịch.
Một số ngơn ngữ lập trình bậc cao phổ biến hiện nay như: ngơn ngữ lập
trình C, C++, Java, Pascal, PHP, Visual Basic.

2.3 Các thành phần của một ngơn ngữ lập trình

2.3.1 Bảng chữ cái
Bảng chữ cái: là tập các kí tự được dung để viết chương trình. Khơng được
phép dùng bất kì kí tự nào ngồi các kí tự quy định trong bảng chữ cái
Ví dụ như: Trong pascal bảng chữ cái bao gồm:





26 chữ cái thường: a, b, c, ..., z
26 chữ cái in hoa: A, B, C, ..., Z
10 chữ số thập phân: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9
Các kí tự đặc biệt…

2.3.2 Cú pháp
Cú pháp là bộ quy tắc để viết chương trình, dựa vào chúng người lập trình và
chương trình dịch biết được tổ hợp nào là không hợp lệ.
2.3.3 Ngữ nghĩa
Ngữ nghĩa là xác định ý nghĩa thao tác cần phải thực hiên, ứng với tổ hợp kí
tự dựa vào ngữ cảnh của nó.
Cụ thể:
 Cú pháp cho biết cách viết một chương trình hợp lệ, còn ngữ nghĩa xác
định ý nghĩa của các tổ hợp kí tự trong chương trình.
 Lỗi cú pháp được chương trình dịch phát hiện và thơng báo cho người lập
chương trình biết, chỉ có các chương trình khơng cịn lỗi cú pháp mới có
thể được dịch sang ngơn ngữ máy.
 Lỗi ngữ nghĩa chỉ được phát hiện khi thực hiện chương trình trên dữ
liệu cụ thể.
2.3.4 Một số khái niệm khác
a. Khái niệm về tên

Mọi đối tượng trong chương trình đều phải được đặt tên theo quy tắc của
mỗi ngơn ngữ lập trình và từng chương trình dịch cụ thể.


 Tên

dành riêng là những tên được ngôn ngữ lập trình quy định với ý nghĩa
xác định. Mà người lập trình khơng thể dùng với ý nghĩa khác. Tên dành
riêng cịn được gọi là từ khóa.
o Ví dụ một số từ khóa:
o Trong ngơn ngữ Pascal: program, var, uses, Begin, End…
o Trong ngôn ngữ C++: main, include, while, void…
 Tên chuẩn là những tên được ngơn ngữ lập trình dùng với ý nghĩa nào đó
trong các thư viện của NNLT, tuy nhiên người lập trình có thể sử dụng với
ý nghĩa khác. Tên dành riêng còn được gọi là từ khóa.
o Ví dụ một số tên chuẩn:
o Trong ngơn ngữ Pascal: Real, lnteger, Sin, Cos, Char…
o Trong ngôn ngữ C++: cin, cout, getchar…
 Tên do người lập trình tự đặt được xác định bằng cách khai báo trước khi
sử dụng và không được trùng với tên dành riêng. Các tên trong chương
trình khơng được trùng nhau.
b. Khái niệm về hằng
Hằng là các đại lượng có giá trị khơng đổi trong q trình thực hiên chương
trình
Các ngơn ngữ lập trình thường có:
 Hằng số học: số nguyên hoặc số thực
 Hằng xâu: là chuổi kí tự đặt trong cặp dấu nháy đơn “hoặc cặp dấu nháy
kép tùy theo NNLT“’’. Trong pascal hằng đặt trong cặp nháy đơn.
 Hằng logic: là các giá trị đúng hoặc sai.
c. Khái niệm về biến

Biến là đại lượng được đặt tên, giá trị có thể thay đổi được trong chương
trình
 Các NNLT có nhiều loại biến khác nhau
 Biến phải khai báo trước khi sử dụng.
d. Khái niệm về chú thích
Chú thích giúp cho người đọc chương trình nhận biết ý nghĩa của chương
trình đó dễ dàng hơn, chú thích khơng ảnh hưởng đến nội dung chương trình
nguồn và được chương trình đích bỏ qua.

2.4 Các bước xây dựng một ngơn ngữ lập trình
Về cơ bản để xây dựng một ngơn ngữ lập trình có hai bước chính như sau:
2.4.1 Thiết kế ngơn ngữ
a) Xây dựng ngữ pháp

Hình 2: Xây dựng ngữ pháp

Xây dựng ngữ pháp chính là xây dựng cách viết code, tạo thành một bộ
quy tắc cho một ngơn ngữ. Nói rõ hơn đó chính là quy tắc viết của các câu


lệnh ví dụ như quy tắc khai báo biến khư thế nào, quy tắc viết vong lặp như
thế nào, quy tắc viết câu lệnh rẽ nhành như thế nào. Mỗi ngơn ngữ sẽ có một
bộ quy tắc riêng.
Ví dụ như: Để viêt câu lệnh in ra màn hình đoạn văn bản “Hello World!’’,
- trong python ta sẽ viết như sau: print(“Hello World”)
- còn trong java ta sẽ viết như sau: System.out.println(“Hello World!”)
b) Xây dựng ngữ nghĩa
Xây dựng ngữ nghĩa là việc viết ra công dụng của câu lệnh lệnh, cách thực
thi câu lệnh đó.
Ví dụ như ngữ nghĩa của lệnh print(“Some text here”) trong ngơn ngữ lập

trình python là: Câu lệnh này sẽ in ra màn hình nội dung trong trong dấu
ngoặc đơn.
2.4.2 Xây dựng trình dịch ngơn ngữ
Trình dịch ngơn ngữ là một phần mềm dịch các chương trình từ một ngơn
ngữ nguồn ở dạng có thể đọc được bởi con người thành một chương trình tương
đương bằng ngơn ngữ đối tượng. Ngơn ngữ nguồn nói chung là ngơn ngữ lập trình
cấp cao và ngơn đối tượng thường là ngơn ngữ máy. Có hai loại trình dịch đó là
Trình biên dịch (Compilers) và trình thơng dịch (Interpreters):
a. Trình thơng dịch
Trình thơng dịch là một thay thế để thực thi một ngơn ngữ lập trình và thực
hiện cơng việc tương tự như một trình biên dịch. Trình thơng dịch thực hiện
kiểm tra từ vựng, phân tích cú pháp và kiểm tra các kiểu tương tự như trình
biên dịch. Nhưng trình thông dịch xử lý cây cú pháp trực tiếp để truy cập các
biểu thức và thực thi câu lệnh thay vì tạo mã trung gian.
Một trình thơng dịch có thể yêu cầu xử lý cùng một cây cú pháp nhiều lần,
đó là lý do tại sao tốc độ sẽ đối chậm hơn so với thực hiện chương trình được
biên dịch.
Việc biên dịch và thơng dịch kết hợp để có thể thực thi ngơn ngữ lập trình.
Trong đó một trình biên dịch tạo mã ở cấp trung gian, sau đó mã được diễn
giải thay vì được biên dịch thành mã máy.
Sử dụng một trình thơng dịch thì sẽ thuận lợi trong q trình phát triển
chương trình, trong đó phần quan trọng nhất là có thể kiểm tra việc sửa đổi
chương trình một cách nhanh chóng thay vì chạy chương trình một cách hiệu
quả.
b. Trình biên dịch
Trình biên dịch là một trình dịch đọc một chương trình được viết bằng
ngơn ngữ bậc cao và chuyển đổi nó thành ngơn ngữ máy hoặc ngơn ngữ cấp
thấp hơn và báo cáo các lỗi có trong chương trình. Nó chuyển đổi tồn bộ mã
nguồn trong một lần hoặc có thể mất nhiều lượt như vậy, nhưng cuối cùng
người dùng sẽ nhận được mã đã được biên dịch sẵn sàng để thực thi.



Hình 3: Trình biên dịch

Trình biên dịch hoạt động thoe từng giai đoạn, các giao đoạn khác nhau có
thể được nhóm thành hai thành phần đó là:
- Giai đoạn phân tích, cũng được gọi là phần đầu: trong đó chương
trình được chia thành các phần cấu thành cơ bản và kiểm tra ngữ pháp,
ngữ nghĩa và cú pháp của mã sau khi mã trung gian được tạo. Giao
đoạn phân tích bao gồm phân tích từ vựng, phân tích ngữ nghĩa và
phân tích cú pháp.
- Giai đoạn tổng hợp, cịn được gọi là phần cuối: trong đó mã trung
gian được tối ưu hóa và mã đích được tạo. Giai đoạn tổng hợp bao
gồm trình tối ưu mã hóa và trình tạo mã.
Các giai đoạn biên dịch
- Trình phân tích từ vựng: Nó quét mã dưới nhóm ký tự, nhóm chuỗi
ký tự thành từ vựng và ra chuỗi mã thơng báo có tham chiếu đến ngơn
ngữ lập trình.
-

Trình phân tích cú pháp: Trong giai đoạn này, các mã thông báo
được tạo trong giai đạn trước được kiểm tra theo ngữ pháp của ngơn
ngữ lập trình, cho dù các biểu thức có đúng về mặt cú pháp hay khơng.

-

Trình phân tích ngữ nghĩa: Nó xác minh xem các biểu thức và câu
lệnh được tạo trong giai đoạn trước có tuân theo quy tắc của ngơn ngữ
lập trình hay khơng và nó tạo ra các cây phân tích chú thích.


-

Trình tạo mã trung gian: Nó tạo ra một mã trung gian tương đương
với mã nguồn. Có nhiều cách trình bày mã trung gian, nhưng TAC (mã
địa chỉ ba) được sử dụng rộng rãi nhất.
TAC (mã địa chỉ ba) là một biểu thức được biên dịch sử dụng như một
công cụ để hiệu chỉnh lại mã nguồn. Mỗi mã địa chỉ ba được cấu thành
từ bốn phần tử: toán tử, toán hạng 1, toán hạng 2, và kết quả.
Mỗi câu lệnh có một dạng chung như sau: x:= y (op) z (Với x, y, z là
các biến, các hằng hoặc biến trung gian được tạo bởi trình biên dịch;
op là tốn tử đại số, hoặc các toán tử logic như AND, OR)


Một biểu thức có nhiều đơn một phép tốn cơ bản sẽ được chia nhỏ để
đưa về dạng mã địa chỉ ba. Ví dụ phép tốn p:= x + y * z sẽ được
chuyển thành:
 t1:= y * z

p:= x + t1
-

Trình tối ưu hóa mã: Nó cải thiện u cầu về thời gian và khơng gian
cuaur chương trình. Để làm như vậy, nó loại bỏ mã dự phịng có trong
chương trình.

-

Trình tạo mã: Đây là giai đoạn cuối cùng của trình biên dịch, trong
đó mã đích cho một máy cụ thể được tạo. Nó thực hiện các hoạt động
như quản lý bộ nhớ, gán đăng ký và tối ưu hóa cụ thể cho máy


Hình 4: Các giai đoạn biên dịch

Symbol Table: Nó là một cấu trúc dữ liệu quản lý các mã định danh
cùng với loại dữ liệu có liên quan mà nó đang lưu trữ. Trình xử lý lỗi phát
hiện, báo cáo, sửa các lỗi gặp phải giữa các giai đoạn khác nhau của trình
biên dịch.


c. So sánh
Đây là bảng so sánh giữa trình biên dịch và trình thơng dịch
Tiêu chí

Trình biên dịch

Trình thơng dịch

Đầu vào

Tồn bộ chương trình

Chỉ một dịng code

Đầu ra

Mã đối tượng trung gian

Không tạo ra bất kỳ mã
đối tượng trung gian nào


Cơ chế hoạt
động

Việc biên dịch sẽ phải hoàn
thành trước khi thực thi

Việc biên dịch và thực thi
sẽ là đồng thời

Tốc độ

Nhanh hoăn

Chậm hơn

Bộ nhớ

Yêu cầu bộ nhớ nhiều hơn
do việc tạo mã đối tượng

Nó địi hỏi ít bộ nhớ hơn
vì nó khơng tạo mã trung
gian

Erors

Hiển thị tất cả các lỗi sau khi Hiển thị lỗi của từng dòng
biên dịch
một


Phát hiện error

Rất khó khăn

Tương đối dễ

Các ngơn ngữ
lập trình

C, C++, C#, Scala,
TypeScript

PHP, Perl, Python, Ruby

Bảng 1: Bảng so sánh trình biên dịch và trình thơng dịch

d. Xây dựng
Để xây dựng được trình dịch ta cần xác định được ngơn ngữ lập trình của
mình sẽ dùng loại trình dịch nào, là trình thơng dịch hay trình biên dịch
ngơn ngữ dùng để xây dựng, có thể sử dụng bất kỳ ngơn ngữ lập trình nào.

2.5 Ngơn ngữ lập trình Python

Hình 5: Ngơn ngữ lập trình python

Python là một ngơn ngữ lập trình bậc cao cho các mục đích lập trình đa năng,
do Guido van Rossum tạo ra và lần đầu ra mắt vào năm 1991. Python được thiết
kế với ưu điểm mạnh là dễ đọc, dễ học và dễ nhớ. Python là ngôn ngữ có hình
thức rất sáng sủa, cấu trúc rõ ràng, thuận tiện cho người mới học lập trình. Cấu
trúc của Python còn cho phép người sử dụng viết mã lệnh với số lần gõ phím tối

thiểu.


Chương 3

Phân tích thiết kế hệ thống

3.1 Thiết kế ngơn ngữ
3.1.1 Ngữ pháp

Hình 6: Ngữ pháp


-

Statements: là các câu lệnh, các câu lệnh thì có thể chứa các câu
lệnh khác và ký tự xuống dòng
Statement: là dịng lệnh đơn, có thể là các lệnh như break, return
hoặc các biểu thức
Expr (expression): là biểu thức, có thể là khai báo biến, hoặc là biểu
thức so sánh
Comp-expr (compare expression): là biểu thức so sánh, có thể chứa
thêm biểu thức số học
Arith-expr (arithmetic expression): là biểu thức số học cộng, trừ
Term: là nhân chia giữa các factor
Factor: là các biểu thức cộng trừ với các factor khác, hoặc là power
Power: là gọi chức năng tính số mũ
Call: gọi hàm
Atom: các loại hàm có sẵn, hoặc tên hàm
List-expr: định nghĩa kiểu dữ liệu list

If-expre: định nghĩa lệnh rẽ nhánh
If-expr-b: định nghĩa lệnh elif
If-expr-c: định nghĩa lệnh else
For-expr: định nghĩa vòng lặp for
While-expr: định nghĩa vòng lặp while
Func-def: định nghĩa cách tạo hàm

Hình 7: Expr, term, factor

3.1.2 Cú pháp
- Khai báo biến: VAR <tên biến> giá trị
Tên biến chỉ bao gồm chữ cái, chữ số và dấu gạch dưới, dấu gạch dưới và chữ
số không thể đứng đầu.
- Câu lệnh rẽ nhánh If
+ IF <điều kiện> THEN <công việc>
+ IF <điều kiện> THEN
ELIF <điều kiện> THEN
<công việc>


END
+ IF <điều kiện> THEN
<công việc>
ELSE
<công việc>
END
+ IF <điều kiện> THEN
<cơng việc>
ELIF <điều kiện> THEN
<cơng việc>

ELSE
<cơng việc>
END
- Câu lệnh vịng lặp For:
FOR i = start TO end THEN <công việc>
- Câu lệnh vịng lặp While:
WHILE <điều kiện> THEN <cơng việc>
- Hàm
FUNC <tên hàm>(<tham số>)
<công việc>
END
+ Gọi hàm: <tên hàm>(<tham số>)

3.2 Lựa chọn trình dịch và cơng cụ
Tơi quyết định chọn trình thơng dịch cho ngơn ngữ lập trình của mình vì:
- Trình thơng dịch tuy chậm hơn chút nhưng tốn ít bộ nhớ.
- Ít cơng đoạn hơn, do khơng phải xây dựng thêm cây hành động, là
câyquyết định thứ tự thực hiện các câu lệnh.
- Ngôn ngữ mà tôi sử dụng để xây dựng trình thơng dịch là python mà ngơn
ngữ này cũng sử dụng trình thơng dịch vì thế sẽ thuận tiện hơn.
Cơng cụ mà tơi sử dụng đó chính là ngơn ngữ python và trình soạn thảo code
Sublimetext.


Chương 4

Triển khai xây dựng

4.1 Bộ phân tích từ vựng (Lexer)
Đây là bước giúp chuyển các đoạn text thành các tokens và lưu vào một mảng.


Hình 8: Lexer


4.2 Bộ phân tích cú pháp (Parser)
Bộ này xây dựng nên cây cú pháp dựa trên token mà bộ phân tích từ vựng sinh ra.

Hình 9: Mơ tả parser


Hình 10: Parser

4.3 Bộ thơng dịch (interpreter)
Bộ này sẽ dựa trên cây cú pháp mà bộ phân tích cú pháp tạo ra, từ đó phân tích
và thực hiện các hành động tương ứng và đồng thời kiểm tra lỗi.


Hình 11: Interpreter


Kết luận và hướng phát triển
- Kết luận
Sau hơn 2 tháng thực hiện đồ án 5,
Những điều tôi đã đạt được là:
+ Tôi đã hiểu hơn về ngôn ngữ lập trình, biết được các thành phần của ngơn
ngữ lập,
+ Biết được rằng hiện nay có rất nhiều ngơn ngữ lập trình.
+ Biết được cách làm thế nào để có thể tự tạo cho mình một ngơn ngữ lập trình
riêng.
+ Ngơn ngữ của tơi có thể cơ bản lập trình được

Những điều chưa làm được là:
+ Tuy hiểu về ngôn ngữ lập trình, tuy nhiên tơi vẫn chưa hiểu sâu do kiến thức
cũng như kỹ năng lập trình cịn hạn chế
+ Ngơn ngữ lập trình của tơi chưa được hồn thiện như ý muốn, ví dụ như
chưa có vịng lặp, và rất nhiều thứ khác nữa
- Hướng phát triển
Trong thời gian tới, tôi sẽ tiếp tục cải thiện vốn kiến thức cũng như kỹ năng
code nhằm mục tiêu hồn thiện ngơn ngữ lập trình của mình, và đạt tới ước mơ
xây dựng một ngơn ngữ lập trình made in Việt Nam. Tiếp tục xây dựng các
hàm cho ngôn ngữ của tôi như vòng lặp while, vòng lặp for, các hàm build-in,
các hàm hỗ trợ tính tốn như sin – cos. Xây dựng trình soạn thảo code (IDE)
cho ngơn ngữ của tơi.


×