Xem xét tới một hàm, ta có thể phân chia thành hai thành phần chính là đầu hàm và thân hàm. Khi duyệt đầu hàm, chúng ta có thể thu thập được các thông tin như kiểu kết quả trả về, tên hàm, các đối số (nếu có). Thân hàm bao gồm một tập các khai báo cũng như các câu lệnh, vì vậy thông tin thu được sẽ đa dạng hơn so với đầu hàm. Để nắm rõ được cách duyệt hàm, chúng ta xét ví dụ trong hình 3.7.
void test(int a){
for(int i = 0; i < a; i++){ if(i < 10){ printf("value of i: %d\n", i); } } } Hình 3. 7. Duyệt một hàm
Duyệt đầu hàm “void test(int a)” ta sẽ thu được các thành phần như kiểu kết quả trả về void, tên hàm test, và đối số a có kiểu dữ liệu int. Trong khi đó, thân hàm bao gồm một vòng lặp for, một câu lệnh điều kiện if và một lời gọi hàm thực thi in giá trị ra màn hình. Như đã nhắc đến trong mục 3.1.2, các khối sẽ được lưu trữ là test, for và if. Các biểu diễn ngữ nghĩa của hàm này được liệt kê như sau:
FUNCTION START TYPE(int) VAR(int, var) FOR
TYPE(int) VAR(int, var) OP(ass_equal) LIT(int) VAR(int, var) OP(rel_less) VAR(int, var)
VAR(int, var) UOP(ari_increment) IF
VAR(int, var) OP(rel_less) LIT(int)
FUNC_ACCESS(void (),printf) LIT(const char *) VAR(int, var) IFEND
FOREND
FUNCTION END
Nghĩa vị bắt đầu của một hàm là FUNCTION START và kết thúc hàm là FUNCTION END. Đối số được biểu diễn tương ứng là TYPE(int) VAR(int, var). Trong thân hàm,
nhiều nghĩa vị được chỉ ra như FOR, IF, FUNC_ACCESS(void (),printf), … Tất cả các nghĩa vị của hàm test trong hình 3.7 được biểu diễn dựa trên bảng nguyên tắc đã được trình bày trong mục 3.1.1. Đây là một ví dụ về biểu diễn một hàm đơn giản, nhưng từ đấy chúng ta có thể hiểu được cách thức chương trình thực hiện đọc các hàm trong mã nguồn C và đưa ra các nghĩa vị tương ứng. Các hàm phức tạp khác cũng sẽ được biểu diễn tương tự như hàm này chỉ khác về nội dung và độ dài của các nghĩa vị.