Em còn là học sinh, đã học được một chút kiến thức về C# và muốn tạo 1 IDE<cụ thể là ide Pasca bằng C#l> có thể compile và xuất kiết quả ra command prompt của windows, hình như đã có một IDE như vậy tên là Olala Pascal.
Compiler đã có của Free Pascal, vấn đề của em ở đây là làm sao để đưa tệp của ta đã viết cho vào Compiler và xuất kết quả ra Command Prompt ạ?
Một cái nữa là cách để đánh dấu các từ highlight và bảng gợi ý ví dụ như ta viết pro thì sẽ xuất hiện bảng chọn các từ program,procedure chẳng hạn?
Cách tạo một IDE?
Giả sử Compiler của e là FreePascal.exe và để compile được suorce code, e dùng command line
FreePascal.exe project1.pas -output project.exe
E có thể dùng Process để chạy command đó
var process = new Process
{
StartInfo = new ProcessStartInfo
{
FileName = "FreePascal.exe",
Arguments = filename + " -output project.exe",
UseShellExecute = false,
RedirectStandardOutput = true,
CreateNoWindow = true
}
};
process.Start();
process.OutputDataReceived += WriteToRichTextBox;
và lấy kết quả hiện thi từ
void WriteToRichTextBox(object sender, DataReceivedEventArg e) {
Invoke (new MethodInvoker(() => {
if (!String.IsNullOrEmpty(e.Data))
{
richTextBoxOutput.AppendText(e.Data + Enviroment.NewLine);
}
}));
}
Hàm Invoke
sử dụng vì richTextBoxOutput
được access cross-threads.
On a side note, nên xác định rõ ràng mục tiêu nha. Bạn muốn thao tác với RichTextBox
rồi gọi process ngoài thì @LocNguyenXuan99 đã hướng dẫn đầy đủ rồi đó. Nhưng nếu bạn muốn viết IDE thì sẽ khác, learning curve sẽ khác rất nhiều.
Học chút kiến thức mà tham vọng IDE thì khó đấy vì để làm IDE thì cần phải làm rất nhiều việc gồm có:
- tích hợp compiler
- tạo trình soạn thảo
- tích hợp nhắc lệnh và highlight cú pháp (cái này cần phải phân tích được cú pháp của câu lệnh của mã nguồn)
- tích hợp quản lí project.
Đấy chỉ mới là những cái core của 1 IDE siêu cơ bản.
Thay vì tham vọng 1 dự án quá sức với người mới như bạn (ngay cả nhiều bạn có nhiều kinh nghiệm trên diễn đàn cũng vẫn là quá sức để làm được) thì bạn có thể nghĩ đến 1 thứ ít phức tạp hơn như làm 1 trình editor tương tự notepad để làm dự án đầu tay thôi chẳng hạn. Đừng xem thường dự án notepad này, ngay cả 1 editor nhỏ như vậy cũng có nhiều việc cho bạn làm đấy
Text editor cơ bản nhất nó giống như notepad thôi, dùng một cái textbox với thanh button có mấy chức năng cơ bản như mở, tìm kiếm,… ở trên là xong. Code editor thì khó hơn, phải làm syntax highlighting và code snippet, mà thôi, dùng luôn Monaco Editor luôn cho nhanh :)), ngay cả VSCode cũng dựa trên Monaco Editor mà ra. Cuối cùng là compiler, làm một cái compiler rất rất khó, phải có kiến thức chuyên sâu về hđh, memory, mã máy các thứ mới làm được nên thôi, chôm của người ta vậy . Còn nếu quá lười thì tích hợp luôn compiler vào VSCode.
Lả lướt một chút tự nhiên thấy chủ đề này của em thời gian trước, nên em muốn chia sẻ lại thành quả sau khi tìm hiểu cách tạo một IDE (dù không phải là IDE hoàn chỉnh hay gì đó ghê gớm nhưng nó vẫn Compile được ạ
Sau thời gian đó em có tìm hiểu và thấy được có một loại Control của Syncfusion Winform tên là “EditControl” cho phép sử dụng để highlight các thành phần trong ngôn ngữ lập trình, các trình biên dịch thì em dùng sẵn các trình biên dịch của FreePascal, OrangeC và Python. Trình biên dịch em gọi từ CommandPrompt ngầm, rồi xuất kết quả ra bảng thông tin. Dưới đây là thành quả của em ạ
Khoảng thời gian làm dự án này khá lâu khoảng 9 tháng, phần mềm cũng được thêm các tính năng phù hợp với cách dạy học lập trình ở trường*(nơi em học)*,…
Còn đây là câu chuyện của em ạ, với dự án tâm huyết đó, em thích lắm, lúc đó em đang học 12, lẽ ra lúc này em đang phải cố gắng học để thi vào trường đại học, Nhưng mà… em lại chọn việc phát triển tiếp dự án bỏ lại việc ôn luyện và học tập, đặt ra mục tiêu rằng phải đạt giải nhất cấp tỉnh cuộc thi Khoa học Kỹ thuật với dự án này, và đồng thời phải lọt vào vòng thi cấp Quốc gia để cạnh tranh với mong muốn có thể được xét tuyển thẳng đại học với kết quả ấy. Cuối cùng, em chỉ đạt giải nhất cấp tỉnh, nhưng không được chọn tham dự thi cấp quốc gia, điều này ban đầu làm em khá buồn, nhưng em không hối hận, em đã làm theo những gì mình đam mê, cũng nhận lại một chút những trải nghiệm về cảm xúc, vui, buồn hay ức chế trong quá trình thực hiện dự án đó. Hiện tại, lực học em không được cao, nên tỷ lệ vào được các trường ĐH top là rất nhỏ. Nên em quyết định mình sẽ đi học cao đẳng FPT Poly ở HN, tiếp tục với đam mê của mình. Dù sao thì cũng chỉ còn mấy ngày nữa là thi rồi, em sẽ cố gắng làm bài thi bằng hết sức mình ạ.
Những điều em vừa nói trên không có ý khoe khoang hay bào chữa cho việc không đỗ đại học hay bất cứ ý gì, nó chỉ là điều mà em muốn nói ra tận sâu thẳm trong lòng thôi. Có thể nhiều người nghĩ rằng em đã chọn sai, đã quá ngu ngơ khi bỏ qua việc học để tập trung vào dự án kia, nhưng em không hối hận, em đã nghe theo lời mách bảo của trái tim mình, nếu không, có thể để bây giờ em vẫn dằn vặt, trong lòng luôn canh cánh vì đã bỏ lại dự án tâm huyết của mình, đứa con tinh thần trong suốt năm tháng cấp 3 của em.
Cảm ơn cậu về những chia sẻ chân thành của cậu nhé!
Sản phẩm cậu làm trông đẹp đấy. Cậu cũng đã dành rất nhiều thời gian, công sức để làm được một sản phẩm tốt, và tớ nghĩ cậu thực ra đã học được rất nhiều từ quá trình làm. Không phải ai cũng có được sự dũng cảm, nhiệt huyết và tận tụy để làm được điều đó đâu (đừng đánh giá thấp những điều đó), đồng thời, cậu cũng đã có 1 trong những trải nghiệm tuyệt vời nhất, khi tự làm một thứ từ đầu tới cuối và thành công.
Tớ sẽ không bàn về việc cậu có thể có lựa chọn khác tốt hơn (dù cậu đã biết). Tớ chỉ muốn nói, dù cậu học ở đâu, làm gì, cậu nên giữ vững sự dũng cảm, nhiệt huyết và tận tụy với nó. Cậu sẽ học được rất nhiều và có thể tiến xa với những phẩm chất đó.
Chúc cậu may mắn trong kỳ thi sắp tới nhé!