Nội Dung Chính
1. Các thành phần cơ bản
Môi ngôn ngữ lập trình thường có ba thành phần cơ bấn là bảng chữ cái, cú pháp và ngữ nghĩa.
a) Bảng chữ cái
là tập các kí tự được dùng để viết chương trình. Không được phép dùng bất kì kí tự nào ngoài các kí tự quy định trong bảng chữ cái.
Trong Pascal, bảng chữ cái bao gồm các kí tự sau:
- Các chữ cái thường và các chữ cái in hoa của bảng chữ cái tiếng Anh:
- 10 chữ số thập phân Ả Rập:
- Các kí tự đặc biệt:
Bảng chữ cái của các ngôn ngữ lập trình nói chung không khác nhau nhiều. Ví dụ, bằng chữ cái của ngôn ngữ lập trình C++ chỉ khác Pascal là có sử dụng thêm các kí tự như dấu nháy kép ("), dấu số ngược (V, dấu chấm than (!).
b) 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 của các kí tự trong bằng chữ cái hợp lệ và tổ hợp nào là không hợp lệ. Nhờ đó, có thể mô tả chính xác thuật toán để máy thực hiện.
c) Ngữ nghĩa
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ó.
Ví dụ
Phần lớn các ngôn ngữ lập trình đều sử dụng dấu cộng (+) để chỉ phép cộng. Xét các biểu thức:
A+B (1)
I+ J (2)
Giả thiết A, B là các đại lượng nhận giá trị thực và 7, J 1a c4c dai luong nhan giá trị nguyên. Khi đó dấu "+" trong biểu thức (1) được hiểu là cộng hai số thực, dấu "+" trong biểu thức (2) được hiểu là cộng hai số nguyên. Như vậy, ngữ nghĩa dấu "+" trong hai ngữ cảnh khác nhau là khác nhau.
Tóm lại, 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.
Các 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 trình biết. Chỉ có các chương trình không còn lỗi cú pháp mới dịch được sang ngôn ngữ máy.
Các lỗi ngữ nghĩa khó phát hiện hơn. Phần lớn các 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 cu thể.
2. Một số khái niệm
a) 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 ngôn ngữ lập trình và từng chương trình dịch cụ thể.
Trong Turbo Pascal, tên là một dãy liên tiếp không quá 127 ki tit bao gém chữ số, chữ cái hoặc dấu gạch dưới và bat dau bằng chữ cái hoặc dấu gạch dưới. Trong chương trình dịch Free Pascal, tên có thể có độ dài tới 255 ki tw.
Ví dụ, trong ngôn ngữ Pascal:
- Các tên đúng: A R21 Pllc 45 e
- Các tên sai:
- A BC (chứa dấu cách)
- 6Pq (bắt đầu bằng chữ số)
- x#y (chứa kí tự ˆ#ˆ không hợp lệ)
Ngôn ngữ Pascal không phân biệt chữ hoa, chữ thường trong tên. Một số ngôn ngữ lập trình khác (ví dụ như C++) phân biệt chữ hoa, chữ thường. Ví dụ, AB va Ab là một tên trong Pascal, nhưng lại là hai tên khác nhau trong C++.
Nhiều ngôn ngữ lập trình, trong đó có Pascal, phân biệt ba loại tên:
- Tên dành riêng;
- Tên chuẩn;
- Tên do người lập trình đặt.
Tên dành riêng
Một số tên được ngôn ngữ lập trình quy định dùng với ý nghĩa riêng xác định, người lập trình không được sử dụng với ý nghĩa khác. Những tên này được gọi là tên dành riêng (còn được gọi là từ khoá).
Ví dụ. Một số tên dành riêng:
Trong Pascal: program, uses, const, type, var, begin, end.
Trong C++: main, include, if, while, void.
Tên chuẩn
Một số tên được ngôn ngữ lập trình dùng với ý nghĩa nhất định nào do. Những tên này được gọi là ứên chuẩn. Tuy nhiên, người lập trình có thể khai báo và dùng chúng với ý nghĩa và mục đích khác.
Ý nghĩa của các tên chuẩn được quy định trong các thư viện của ngôn ngữ lập trình.
Ví dụ. Một số tên chuẩn
- Trong Pascal: abs Integer real sqr longint extended sqrt byte break
- Trong C++: cin cout getchar
Tên do người lập trình đặt
Tên do người lập trình đặt được dùng với ý nghĩa riêng, xác định bằng cách khai báo trước khi sử dụng. Các tên này không được trùng với tên dành riêng.
Ví dụ
Tên do người lập trình đặt: A1 DELTA CT_Vidu
b) Hằng và biến
Hằng
Hằng là đại lượng có giá trị không thay đổi trong quá trình thực hiện chương trình.
- Trong các ngôn ngữ lập trình thường có các hằng số học, hằng lôgic, hằng xấu. Hằng số học là các số nguyên hay số thực (dấu phẩy tĩnh hoặc dấu phẩy động).
- Hằng lôgic là giá trị đúng hoặc sai tương ứng với true hoặc false.
- Hằng xâu là dãy kí tự trong bộ mã ASCII. Khi viết, dãy kí tự này được đặt trong cặp dấu nháy (Pascal dùng dấu nháy đơn, còn C++ dùng dấu nháy kép).
Ví dụ
- Hằng số học:
- Hằng lôgic:
+ Trong Pascal: TRUE FALSE
- Hằng xâu:
+ Trong Pascal: 'Information' 'Lop 11A'
+ Trong C++: "Information" "Lop 11A"
Chú ý: Hằng dấu nháy đơn trong Pascal được viết là "". Để có xâu tiếng Anh I'm a student, trong Pascal cần viết là 'I''m a student'.
Biến
Biển là đại lượng được đặt tên, dùng để lưu trữ giá trị và giá trị có thể được thay đổi trong quá trình thực hiện chương trình .
Tuỳ theo cách lưu trữ và xử lí, Pascal phân biệt nhiều loại biến. Các biến dùng trong chương trình đều phải khai báo. Việc khai báo biến sẽ được trình bày ở các phần sau.
c) Chú thích
Có thể đặt các đoạn chú thích trong chương trình nguồn. Các chú thích này giúp cho người đọc chương trình nhận biết ý nghĩa của chương trình đó dễ 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 dịch bỏ qua.
Trong Pascal các đoạn chú thích được đặt giữa cặp dấu { và } hoặc (* và *). Một trong những cách tạo chú thích trong C++ là đặt chúng giữa cặp dấu /* và */.
TÓM TẮT
- Cần có chương trình dịch để chuyển chương trình nguồn thành chương trình đích.
- Có hai loại chương trình dịch: thông dịch và biên dịch.
- Các thành phần của ngôn ngữ lập trình: bảng chữ cái, cú pháp và ngữ nghĩa.
- Mọi đối tượng trong chương trình đều phải được đặt tên:
- Tên dành riêng: Được dùng với ý nghĩa riêng, không được dùng với ý nghĩa khác.
- Tên chuẩn: Tên dùng với ý nghĩa nhất định, khi cần dùng với ý nghĩa khác thì phải khai báo.
- Tên do người lập trình đặt: Cần khai báo trước khi sử dụng.
- Hằng: Đại lượng có giá trị không thay đổi trong quá trình thực hiện chương trình.
- Biến: Đại lượng được đặt tên. Giá trị của biến có thể thay đổi trong quá trình thực hiện chương trình.
CÂU HỎI VÀ BÀI TẬP
1. Tại sao người ta phải xây dựng các ngôn ngữ lập trình bậc cao?
2. Chương trình dịch là gì? Tại sao cần phải có chương trình dịch?
3. Biên dịch và thông dịch khác nhau như thế nào?
4. Hãy cho biết các điểm khác nhau giữa tên dành riêng và tên chuẩn.
5. Hãy tụ viết ra ba tên đúng theo quy tắc của Pascal.
6. Hãy cho biết những biểu diễn nào dưới đây không phải là biểu diễn hằng trong Pascal và chỉ rõ lỗi trong tùng trường hợp:
a) 150.0
e) A20
b)-22
f) 1.06E-15
c) 6,23
g) 4+6
d) '43'
h) 'C
i) 'TRUE'
Bài đọc thêm 2
NGÔN NGỮ PASCAL
1. Vài nét về tác giả của ngôn ngữ Pascal
Giáo sư Niklaus Wirth, tác giả của ngôn ngữ Pascal sinh năm 1934 tại Thuỵ Sĩ. Ông tốt nghiệp Đại học Công nghệ Liên bang Thuỵ Sĩ (ETH) tại thành phố quê hương Zurich vào năm 1959. Ông nhận bằng Thạc sĩ tại trường Đại học Tổng hợp Laval ở Quebec, Canada năm 1960.
Năm 1963, tại Đại học Tổng hợp California (Mỹ) dưới sự lãnh đạo của giáo sư Harry Huskey ông thực hiện đề án mở rộng ngôn ngữ Algol-60 (ngôn ngữ Euler) và bảo vệ luận án tiến sĩ.Trong các năm 1963-1967, ông giảng dạy tại Đại học Tổng hợp Stanford (Mỹ). Cũng trong thời gian này ông được mời vào nhóm chuyên gia quốc tế IFIP thiết kế Algol-68.
Năm 1967, Wirth trở về nước và giảng dạy tại Tổng hợp Zurich.
Năm 1968, ông chuyển sang ETH, tại đây ông bắt đầu tham gia thiết kế Pascal.
Năm 1970, chương trình dịch Pascal đầu tiên được hoàn thành.
Trong thời gian 1978-1981, Wirth lãnh đạo dự án thiết kế ngôn ngữ Modula-2, máy tính cá nhân 16-bit Lilith dựa trên nó và hệ điều hành OS Medos. Tất cả các chương trình, kể cả chương trình hệ thống, được thực hiện hoàn toàn trên Modula-2.
Năm 1984, do công lao to lớn trong việc phát triển các ngôn ngữ lập trình và thiết kế máy tính cá nhân Lilith, ông được giải thưởng Alan Turing – giải thưởng cao quý nhất trong giới Tin học, mà về ý nghĩa được coi là tương đương với giải Nobel.
Trong thời gian 1986-1989, Wirth lãnh đạo dự án phát triển ngôn ngữ Oberon, hệ điều hành hướng đối tượng Oberon và trạm làm việc 32-bit Ceres. Rất nhiều ý tưởng của dự án này được các đồng nghiệp từ phòng thí nghiệm Sun Labs sử dụng cho ngôn ngữ và công nghệ Java.
Từ năm 1990 ông lãnh đạo Viện Các hệ thống máy tính tại ETH.
Năm 1999, ông nghỉ hưu và trở thành Giáo sư danh dự của ETH.
2. Pascal – Ngôn ngữ của học đường?
Pascal! Hỏi có người lập trình nào không biết ngôn ngữ này? Thành công vang dội của nó bắt đầu vào những năm 1980, thời kì của cuộc cách mạng trong công nghiệp máy tính và giai đoạn nở rộ của lập trình có cấu trúc. Có thể nói Pascal xứng đáng là điểm khởi đầu cho một kỉ nguyên mới của các ngôn ngữ lập trình.
Pascal – Sự ra đời và đặc điểm
Vào đầu năm 1971, bản mô tả ngôn ngữ mới của Viện Công nghệ Liên bang Thuỵ Sĩ được công bố trong số đầu tiên của tạp chí Acta Informatica. Sự ra đời của Pascal có thể được tính từ thời điểm này.
Tác giả của nó, Giáo sư Niklaus Wirth trở nên nổi tiếng vì sự xuất hiện của Pascal. Những dự án sau này của ông chứng minh hùng hồn cho thế giới rằng chìa khoá tới các bí mật của máy tính chính là ở sự kết hợp hài hoà giữa Toán học, Công nghệ và Lập trình. Và nếu tiếp cận vấn đề một cách hợp lí thì có thể tạo ra các ngôn ngữ, hệ điều hành và ngay cả các máy tính tuyệt vời vượt các chuẩn công nghiệp,... chỉ bằng sức lực của những sinh viên.
Người ta thường nói đến các điểm khác biệt của Pascal so với những ngôn ngữ khác, như ngôn ngữ C. Nhưng chính Dennis Ritchie, tác giả của C đã phát biểu (1993): 'Tôi khẳng định rằng Pascal rất gần với C. Hai ngôn ngữ này khác biệt về chi tiết, nhưng về cơ sở chúng là giống nhau... Khi nhìn vào các kiểu dữ liệu, cũng như các phép toán trên chúng, ta có thể phát hiện ra những sự giống nhau rất lớn, mặc dù rằng ý đồ của Wirth khi tạo ra Pascal rất khác với ý đồ của chúng tôi khi tạo ra C. Wirth tạo ngôn ngữ để giảng dạy và do vậy tất nhiên cần đáp ứng các yêu cầu sư phạm".
Khác với C, Pascal không được tạo ra để làm ngôn ngữ lập trình hệ thống. Để đề cao tính đơn giản và hiệu quả dựa trên mức độ hiểu về khoa học lập trình thời bấy giờ, Wirth chủ tâm chấp nhận các hạn chế của ngôn ngữ, trước tiên trong các vấn đề liên quan đến thế giới bên ngoài (vào/ra và các công cụ phụ thuộc hệ thống). Mặc dù vậy, nếu nghĩ rằng Pascal là ngôn ngữ chỉ dành để giảng dạy thì sẽ sai lầm. Hãy nghe chính ý kiến của Wirth về vấn đề này (1984): "Có người cho rằng Pascal được thiết kế như một ngôn ngữ để giảng dạy. Mặc dù điều này là đúng, nhưng việc sử dụng nó để giảng dạy không phải là mục đích duy nhất. Thực tế, tôi không tin vào sự thành công của việc áp dụng trong khi học các công cụ và phương pháp mà không thể sử dụng để giải quyết các bài toán thực tế. Theo các tiêu chuẩn ngày nay thì Pascal có những nhược điểm rõ ràng khi lập trình các hệ thống lớn, nhưng 15 năm trước, nó là thoả hiệp hợp lí giữa cái mong muốn và hiệu quả".
Pascal và lập trình có cấu trúc
Ngôn ngữ Pascal được Wirth tạo ra dưới ảnh hưởng các tư tưởng của C. A. R.Hoare, đăng trong công trình "Bàn về cấu trúc dữ liệu" (Notes on Data Structuring, Academic Press, 1972). Đóng góp của nhà bác học người Anh lớn tới mức có thể gọi ông là cha đỡ đầu của Pascal.
Pascal được coi như khởi đầu của kỉ nguyên lập trình cấu trúc. Tất cả bắt đầu từ bài báo của chuyên gia người Hà Lan E. W. Dijkstra "Lập trình cấu trúc" (Structured Programming, 1969). Trong bài báo này ông đề xuất hạn chế các cấu trúc điều khiển chương trình chỉ ở ba dạng là tuần tự, rẽ nhánh và lặp. Từ đó suy ra rằng câu lệnh chuyển vô điều kiện (goto) trong các ngôn ngữ ALGOL và PL/1 (rất phổ biến thời bấy giờ) là hoàn toàn không cần thiết. Thật sự là Wirth cũng không dám loại câu lệnh này khỏi Pascal. Nhưng điều chủ yếu nằm ở chỗ khác: Lập trình cấu trúc liên quan đến nguyên tắc "từ trên xuống dưới" (làm mịn từng bước), yêu cầu tính cấu trúc của điều khiển và dữ liệu, dựa vào sự đơn giản và cơ sở toán học mà tăng độ tin cậy của phần mềm. Tất cả những điều này đều khả thi nhờ các khả năng của Pascal.
Về ý đồ khi xây dựng Pascal, Wirth viết: "Điểm mới của Pascal là đưa ra các cấu trúc và kiểu dữ liệu phong phú, cũng giống như ALGOL đưa ra các loại cấu trúc điều khiển. Trong ALGOL chỉ có ba kiểu dữ liệu cơ sở: các số nguyên và thực, giá trị chân lí, mảng; Pascal đã đưa thêm các kiểu dữ liệu cơ sở và còn cho khả năng xác định những kiểu cơ sở mới (kiểu liệt kê, kiểu miền con), cũng như các dạng cấu trúc dữ liệu mới: bản ghi, tập hợp, tệp, mà một số trong chúng đã có trong COBOL. Và tất nhiên, quan trọng nhất là tính đệ quy trong việc mô tả các cấu trúc và hệ quả của điều này là khả năng kết hợp và lồng các cấu trúc".
Pascal có tiếp tục tồn tại?
Để kết luận, xin trích dẫn lời của Dennis Ritchie tác giả ngôn ngữ C: "Pascal là một ngôn ngữ thanh lịch. Nó vẫn tiếp tục tồn tại. Nó đã khởi nguồn cho không ít ngôn ngữ đàn em và có ảnh hưởng sâu sắc đến việc thiết kế các ngôn ngữ lập trình nói chung".
Bình Luận
Để Lại Bình Luận Của Bạn