cpphs-hugs - Trực tuyến trên đám mây

Đây là lệnh cpphs-hugs có thể chạy trong nhà cung cấp dịch vụ lưu trữ miễn phí OnWorks bằng cách sử dụng một trong nhiều máy trạm trực tuyến miễn phí của chúng tôi như Ubuntu Online, Fedora Online, trình giả lập trực tuyến Windows hoặc trình mô phỏng trực tuyến MAC OS

CHƯƠNG TRÌNH:

TÊN


cpphs - bộ tiền xử lý giống cpp-a tự do hóa cho Haskell

SYNOPSIS


cpph [TÊN TỆP|TÙY CHỌN] ...

MÔ TẢ


cpph là một quá trình tái thực hiện tự do hóa cpp (1) bộ tiền xử lý C, trong và cho
Haskell.

Tại sao phải triển khai lại cpp? Đúng hay sai, bộ xử lý trước C được sử dụng rộng rãi trong Haskell
mã nguồn. Nó cho phép biên dịch có điều kiện cho các trình biên dịch khác nhau, khác nhau
các phiên bản của cùng một trình biên dịch và các nền tảng hệ điều hành khác nhau. Nó cũng thỉnh thoảng được sử dụng
cho ngôn ngữ macro của nó, có thể cho phép một số dạng chi tiết cụ thể cho nền tảng-
điền vào, chẳng hạn như việc tạo bảng soạn sẵn tẻ nhạt của các định nghĩa cá thể và FFI
các bản kê khai. Tuy nhiên, có hai vấn đề với cpp, ngoài tính thẩm mỹ rõ ràng
những cái:

Đối với một số hệ thống Haskell, đặc biệt là Hugs trên Windows, một cpp thực sự không có sẵn bởi
mặc định.

Ngay cả đối với các hệ thống Haskell khác, cpp phổ biến được cung cấp bởi dòng gcc 3.x
đang thay đổi một cách tinh vi theo những cách không tương thích với cú pháp của Haskell. Ở đây có
luôn luôn có vấn đề với, ví dụ, khoảng trống chuỗi và các ký tự nguyên tố trong
định danh. Những vấn đề này sẽ chỉ trở nên tồi tệ hơn.

Vì vậy, có vẻ đúng khi cố gắng cung cấp một giải pháp thay thế cho cpp, cả hai đều tương thích hơn với
Haskell, và bản thân nó được viết bằng Haskell để nó có thể được phân phối với các trình biên dịch.

cpph có khá nhiều tính năng hoàn chỉnh và tương thích với -truyên thông phong cách của cpp.
Nó có hai chế độ:

chỉ biên dịch có điều kiện (--nomacro),

và mở rộng macro đầy đủ (mặc định).

In --nomacro chế độ, cpph chỉ thực hiện các hành động biên dịch có điều kiện, tức là #include'S,
#nếu'cát #ifdefđược xử lý theo định nghĩa thay thế văn bản (cả lệnh-
dòng và nội bộ), nhưng không thực hiện mở rộng macro được tham số hóa. Đầy đủ
chế độ tương thích (mặc định), thay thế bằng văn bản và mở rộng macro cũng
được xử lý trong phần nội dung còn lại của văn bản không phải cpp.

Tính năng làm việc:

#ifdef biên dịch có điều kiện đơn giản

#nếu ngôn ngữ boolean đầy đủ của định nghĩa (), &&, ||, ==, v.v.

#elif điều kiện chuỗi

#định nghĩa
định nghĩa nội dòng (thay thế văn bản và macro)

#undef thu hồi nội dòng các định nghĩa

#include
bao gồm tệp

#hàng chỉ thị số dòng

\n dòng liên tục trong tất cả # lệnh

/ ** / phân loại mã thông báo trong một định nghĩa macro

## Phân loại mã thông báo kiểu ANSI

# Chuỗi mã thông báo kiểu ANSI

__TẬP TIN__
thay thế văn bản đặc biệt cho các thông báo lỗi DIY

__HÀNG__
thay thế văn bản đặc biệt cho các thông báo lỗi DIY

__NGÀY__
thay thế văn bản đặc biệt

__THỜI GIAN__
thay thế văn bản đặc biệt

Mở rộng macro là đệ quy. Định nghĩa lại tên macro không tạo ra cảnh báo.
Macro có thể được xác định trên dòng lệnh với -D giống như thay thế văn bản. Macro
các tên được phép trở thành định danh Haskell, ví dụ như với dấu chính `và dấu lùi ´
ký tự, hơi lỏng hơn trong C, nhưng chúng vẫn có thể không bao gồm toán tử
ký hiệu.

Việc đánh số các dòng trong đầu ra được giữ nguyên để bất kỳ bộ xử lý nào sau này có thể cung cấp
thông báo lỗi có ý nghĩa. Khi một tập tin #include'NS, cpph chèn #hàng chỉ thị cho
cùng một lý do. Việc đánh số phải chính xác ngay cả khi có dòng liên tục.
Nếu bạn không muốn #hàng chỉ thị trong đầu ra cuối cùng, sử dụng --noline tùy chọn.

Bất kỳ lỗi cú pháp nào trong chỉ thị cpp đều đưa ra thông báo tới stderr và tạm dừng chương trình.
Việc không tìm thấy tệp # include'd sẽ đưa ra cảnh báo cho stderr, nhưng quá trình xử lý vẫn tiếp tục.

Bạn có thể cung cấp bất kỳ số lượng tên tệp nào trên dòng lệnh. Các kết quả được phân loại trên
đầu ra tiêu chuẩn.

-Dsym xác định thay thế văn bản (giá trị mặc định là 1)

-Dsym =val
xác định sự thay thế văn bản bằng một giá trị cụ thể

-Icon đường thêm một thư mục vào đường dẫn tìm kiếm cho # include's

-Ohồ sơ chỉ định một tệp cho đầu ra (mặc định là stdout)

--nomacro
chỉ xử lý # ifdef's và # include's,
không mở rộng macro

--noline
loại bỏ phân # đường khỏi đầu ra

--dải
chuyển đổi các nhận xét kiểu C sang khoảng trắng, ngay cả bên ngoài
chỉ thị cpp

--hash
nhận dạng toán tử ANSI # stringise và ## cho
phân loại mã thông báo, trong macro

--bản văn coi đầu vào là văn bản thuần túy, không phải mã Haskell

--bố trí
duy trì các dòng mới trong các mở rộng vĩ mô

--không sáng
xóa các bình luận kiểu chữ

--phiên bản
báo cáo số phiên bản cpphs và dừng

KHÔNG có thay thế văn bản được xác định theo mặc định. (Cpp bình thường thường có định nghĩa
cho máy, hệ điều hành, v.v. Có thể dễ dàng thêm chúng vào mã nguồn cpphs nếu bạn muốn.)
Đường dẫn tìm kiếm được tìm kiếm theo thứ tự -I tùy chọn, ngoại trừ thư mục của
tệp đang gọi, sau đó là thư mục hiện tại, luôn được tìm kiếm đầu tiên. Một lần nữa, không có
đường dẫn tìm kiếm mặc định (và một lần nữa, điều này có thể dễ dàng thay đổi).

KHÁC BIỆT TỪ CPP


Nói chung, cpphs dựa trên -truyên thông hành vi, không phải ANSI C và có
sau những điểm khác biệt chính so với cpp tiêu chuẩn.

Tổng Quát

Sản phẩm # giới thiệu bất kỳ chỉ thị cpp nào phải nằm trong cột đầu tiên của dòng (trong khi
ANSI cho phép khoảng trắng trước # ).

Tạo ra #hàng n "tên tập tin"cú pháp, không phải # n "tên tập tin" khác nhau.

C nhận xét chỉ bị xóa khỏi các chỉ thị cpp. Họ không bị tước khỏi người khác
chữ. Hãy xem xét ví dụ rằng trong Haskell, tất cả những điều sau đây là toán tử hợp lệ
ký hiệu: /* */ * / * Tuy nhiên, bạn có thể bật tính năng xóa nhận xét C với --dải tùy chọn.

Macro Ngôn ngữ

Chấp nhận / ** / để dán mã thông báo trong định nghĩa macro. Tuy vậy, /* */ (với bất kỳ văn bản nào
giữa chú thích mở / đóng) chèn khoảng trắng.

ANSI ## toán tử dán mã thông báo có sẵn với --hash lá cờ. Điều này là để tránh
hiểu sai bất kỳ toán tử Haskell hợp lệ nào có cùng tên.

Thay thế một tham số hình thức macro bằng tham số thực tế, ngay cả bên trong một chuỗi (kép hoặc đơn
trích dẫn). Đây là hành vi-truyền thống, không được hỗ trợ trong ANSI.

Nhận ra # toán tử stringisation trong định nghĩa macro chỉ khi bạn sử dụng --hash
Lựa chọn. (Đây là phần bổ sung ANSI, chỉ cần thiết vì chuỗi ký tự được trích dẫn (ở trên) là
bị ANSI cấm.)

Bảo toàn khoảng trắng trong định nghĩa thay thế văn bản chính xác (dòng mới modulo),
nhưng không gian đầu và cuối bị loại bỏ.

Duy trì khoảng trắng trong định nghĩa macro (và theo sau nó) một cách chính xác (modulo
dòng mới), nhưng không gian hàng đầu bị loại bỏ.

Duy trì chính xác khoảng trắng trong đối số lệnh gọi macro (bao gồm cả dòng mới), nhưng đứng đầu
và dấu cách sẽ bị loại bỏ.

Với --bố trí tùy chọn, sự liên tục của dòng trong một định nghĩa thay thế văn bản hoặc macro
được giữ nguyên dưới dạng ngắt dòng trong lệnh gọi macro. (Hữu ích cho mã nhạy cảm với bố cục trong
Haskell.)

Sử dụng cpphs-ôm trực tuyến bằng dịch vụ onworks.net



Các chương trình trực tuyến Linux & Windows mới nhất