Các thành phần cơ bản của ngôn ngữ lập trình Box

Một phần của tài liệu Phân tích mã nguồn c++ phục vụ đánh giá ảnh hưởng của sự thay đổi (Trang 30 - 32)

trình Box

2 OctalLiteral ::= ‘0t’ [0-7]+

3 HexadecimalLiteral ::= ‘0x’ [0-9A-Fa-f]+

4 BinaryLiteral ::= ‘0b’ [0-1]+

Các quy tắc DecimalLiteral, OctalLiteral, HexadecimalLiteral và

BinaryLiteral là các quy tắc cơ bản để biểu diễn một số ở các hệ cơ số thông dụng trong các ngôn ngữ lập trình: hệ cơ số 10, hệ cơ số 8, hệ cơ số 16 và hệ cơ số 2. 1 UntypedNumberLiteral 2 := DecimalLiteral 3 | OctalLiteral 4 | HexadecimalLiteral 5 | BinaryLiteral

Quy tắc UntypedNumberLiteral biểu diễn một số bất kỳ không có kiểu, ví dụ như 42, 0t52, 0x2A và 0b101010 biểu diễn cùng một số ở các hệ cơ số khác nhau. 1 TypedNumberLiteral 2 := ( DecimalLiteral 3 | OctalLiteral 4 | HexadecimalLiteral 5 | BinaryLiteral ) [bsilBSIL]

Quy tắc TypedNumberLiteral biểu diễn một số có kiểu bằng cách thêm một ký tự hậu tố vào sau một biểu diễn số không có kiểu, ví dụ như 42b, 0t52s,

0x2AI và 0b101010L. Các mô tả cụ thể về kiểu của số sẽ được làm rõ ở các phần sau.

1 TupleIdentifier := [A-Z] [0-9A-Z_a-z]*

2 MemberIdentifier := ‘.’ [a-zA-Z] [0-9A-Z_a-z]*

3 FunctionIdentifier := ‘_’ [0-9A-Z_a-z]*

4 ParameterIdentifier := ‘$’ [0-9A-Z_a-z]*

5 VariableIdentifier := [a-z] [0-9A-Z_a-z]*

Các quy tắcTupleIdentifier, MemberIdentifier,FunctionIdentifier,

ParameterIdentifier, VariableIdentifiervàLabelIdentifiertheo thứ tự là các quy tắc biểu diễn các định danh của bản ghi, thành phần trong bản ghi, tên của một hàm, tên của tham số trong hàm, tên của biến và tên của nhãn. Các định danh này đều được tạo thành bởi các ký tự chữ cái, chữ số và dấu gạch chân, điểm khác nhau của các định danh này là ở ký tự khởi đầu của từng định danh, ví dụ như SimpleTuple, .tupleMember, _a_random_function,

$functionParameter, variable và @label.

1 Whitespace := [\t\n\r ]+

2 BlockComment := ‘/*’ [^*]* ‘*’+ ([^/] [^*]* ‘*’+)* ‘/’

3 LineComment := ‘//’ [^\r\n]*

Quy tắc Whitespace được dùng để biểu diễn các khoảng trắng, trong khi đó BlockCommentvà LineComment biểu diễn các bình luận trong mã nguồn. Các quy tắc này có thể có mặt ở giữa bất kỳ hai quy tắc nào, chúng không có giá trị ngữ pháp ngoại trừ làm nhiệm vụ ngăn cách giữa những nguyên tắc khác. Các nguyên tắc này được trình biên dịch bỏ qua ngay sau khi tách các nguyên tắc và trước khi biên dịch.

Một phần của tài liệu Phân tích mã nguồn c++ phục vụ đánh giá ảnh hưởng của sự thay đổi (Trang 30 - 32)