Xcode không biết cách xử lý tệp yacc và flex, đồng thời sẽ tự động biên dịch các tệp mã được tạo trong dự án của bạn. Bí quyết là tìm ra những phần mở rộng mà nó mong đợi. Trong Xcode 4, nhấp vào mục cấp cao nhất trong danh sách nguồn để nhận cài đặt dự án. Nhấp vào mục tiêu của bạn trong danh sách tiếp theo, sau đó xây dựng Quy tắc trong tiêu đề chế độ xem bảng. Cuộn xuống "Quy tắc hệ thống Lex" và "Quy tắc hệ thống Yacc", sau đó di con trỏ qua "tệp nguồn" trong mỗi tệp để tìm mẹo công cụ với các tiện ích mở rộng mà nó sử dụng cho quy tắc đó. (? ... Đó là gì không rõ ràng)
Đối với Lex, đó là: * .l * .lm * .lmm * .lpp * .lp * .lxx
Đối Yacc, đó là: * .y * .ym * .ymm * .ypp * .yp * .yxx
Nếu bạn có bất kỳ mã Mục tiêu-C nào trong các tệp lex/yacc, bạn sẽ cần sử dụng phần mở rộng.? m để báo cho Xcode tạo tệp .m; tương tự,.? mm cho Objective-C++. (Tôi đoán.? Pp,.? P, và.? Xx là tất cả C++.) Từ những gì tôi đã thấy, điều này chỉ cần làm việc, không cần Makefile. Nếu bạn muốn giữ phần mở rộng .flex, bạn có thể nhấp vào nút "Sao chép vào mục tiêu" trong quy tắc Lex và tạo quy tắc mới cho tiện ích mở rộng đó.
Giờ phần "thú vị" đang cố gắng tích hợp yacc vào mã của bạn. Theo mặc định, hàm yyparse() mà làm cho toàn bộ mọi thứ mong đợi đầu vào từ STDIN trừ khi bạn nhảy qua một loạt các vòng để làm cho nó hoạt động theo cách khác. Nếu bạn đã chết khi sử dụng yacc, có rất nhiều thông tin trên web về cách uốn cong nó theo ý thích của bạn. Nhưng bạn có thể gió lên với ít vết lõm bàn phím trên trán hơn nếu bạn sử dụng trình tạo trình phân tích cú pháp hiện đại như lemon. Cú pháp được dựa trên yacc's, và nó là LALR (1) (bất cứ điều gì có nghĩa là) vì vậy tất cả mọi thứ bạn biết về thay đổi/giảm xung đột vẫn giữ. Tôi thấy nó dễ dàng hơn nhiều so với yacc/flex.
Chỉnh sửa: Tôi dường như nhớ lại rằng Xcode không tự động thêm tệp .l vào giai đoạn xây dựng, nhưng nó đã thêm tệp .y. Kiểm tra các giai đoạn xây dựng của bạn bằng cách nhấp vào mục cấp cao nhất trong danh sách nguồn Xcode, nhấp vào bạn nhắm mục tiêu, nhấp vào tiêu đề bảng Xây dựng giai đoạn, sau đó mở rộng hàng Nguồn biên dịch. Nếu tệp .l của bạn không có trong đó, hãy kéo nó vào từ danh sách nguồn.
'mã nguồn.yacc' là một trong các loại tệp được hỗ trợ bởi Xcode. nếu bạn mở Info.plist của Xcode, bạn sẽ thấy danh sách các tiện ích mở rộng được công nhận cho các tệp nguồn Yacc (Bison); 'ym' là một trong số đó. –
Điều cần biết, nhưng đó không phải là những gì tôi gọi là "tài liệu". :-) –
Uh ok nhưng nếu tôi chỉ muốn sử dụng flex? Flex được hỗ trợ ra khỏi hộp w/Xcode? Tôi là một người mới vì vậy tôi tự hỏi ... – fooledbyprimes