Từ 1 tới 6 trên tổng số 6 kết quả

Đề tài: Đọc hàm từ file text và chạy hàm đó

  1. #1
    Ngày gia nhập
    03 2008
    Bài viết
    64

    Question Đọc hàm từ file text và chạy hàm đó

    giờ có đoạn text,chứa trong file abc.txt với nội dung như sau:

    a = F5(); b = F6(a);F7(a);

    trong đó thì F5() là ý là muốn nhập từ giá trị từ bàn phím vào biến a,F6 ( a ) là return a,F7 (a) là in a ra màn hình

    sau khi chạy chương trình với file text đó,giả sử mình nhập từ bán phím là số 5 thì trên màn hình sẽ in ra số 5

    làm cách nào để mình viết một chương trình đọc và thực hiện được các hàm như trên?giống như một trình biên dịch mini vậy?

  2. #2
    Ngày gia nhập
    05 2011
    Bài viết
    82

    Trình biên dịch mini: cũng khá dễ chủ yếu là các phân tích cú pháp thôi.
    Mỗi lệnh kết thúc bổi dấu ';'
    có 2 loại lệnh:
    1. lệnh gắn( liên kết bởi dấu "=")
    2. lệnh hiện thị

  3. #3
    Ngày gia nhập
    08 2009
    Nơi ở
    TP Cần Thơ - Lộ 91B
    Bài viết
    214

    - Theo sáng kiến của bạn thì làm được nhưng sẽ ứng dụng không rộng và khả năng hổ trợ của ứng dụng là không phong phú. không thể coi là trình biên dịch mini

    - 1 Trình biên dịch không đơn giản như chúng ta nghĩ đâu
    - Để viết được trình biên dịch chúng ta phải biết phân tích cú pháp, tập các luật sinh, triển khai cây, mệnh đề, vị từ, và còn nhiều thứ khác nữa .
    - Trong các trường đại học đều có dại về Trình Biên Dịch nhưng ở cấp cơ bản thôi.

    PHÁT TRIỂN PHẦN MỀM HỖ TRỢ CÔNG VIỆC
    ỨNG DỤNG QUẢN LÝ CHO DOANH NGHIỆP VỪA VÀ NHỎ

    (0969.867.490 - ltnghia.wins@gmail.com)

  4. #4
    Ngày gia nhập
    03 2008
    Bài viết
    64

    thật ra thầy có giao cho mình bài tập với đề bài như sau
    Giả sử trong ct có sẵn các hàm sau:
    - F1(int a) cho kết quả(>>>>>>): a+1
    - F2(int a) >>>>>>: a-1
    - F3(int a, int b) >>>>>>>: a+ b
    - F4(int a, int b) >>>>>>>: a - b
    - F5() >>>>>>a với input lấy từ bàn phím.
    - F6(int a)>>>>>>>xuất ra màn hình.
    Chương trình sẽ đọc 1 file ABC loại XML/txt để thực hiện mô tả trong file này và cho kết quả.

    Giả sử bạn có 5 ô nhớ a, b, c, d, e và 6 hàm F1, F2, F3, F4, F5, F6 . Trong file ABC chứa 1 đoạn chương trình đơn giản sử dụng 5 ô nhớ và 6 hàm trên. Chương tình sẽ đọc mô tả và thực hiện đúng theo mô tả. Đoạn mô tả có thể là một đoạn code cs, java... hoặc tùy ý.
    VD:
    a = F5();
    b = F2(a);
    c= F3(a, b);
    F6(c);

    Khi chạy chương trình và đọc file mô tả trên, nhận input từ bàn phím = 5 và xuất ra màn hình kết quả = 9.
    tuy nhiên vẫn ko biết cách làm... ,ngoài ra thấy giống như trình biên dịch

    ai giúp với

  5. #5
    Ngày gia nhập
    05 2011
    Bài viết
    82

    Bạn dựa vào mã giả này mà xử lý
    Code:
    danh_sach_lenh=  noi_dung_file.slipt(";");
    foreach(lenh : danh_sach_lenh){
       if( lenh.contain("="){
          xu_ly_lenh_gan(lenh);
       }else if(lenh.startWith("F5"){
         xu_ly_nhap_lieu(lenh);
       }else if(lenh.startWith("F6"){
         xu_ly_xuat_du_lieu(lenh);
       }else{
        println("Loi);
       }
    }

  6. #6
    Ngày gia nhập
    07 2008
    Nơi ở
    /media/Anime
    Bài viết
    2,288

    Mặc định Đọc hàm từ file text và chạy hàm đó

    Bạn cũng có thể làm bằng Reflection. Ví dụ :

    Input :
    PHP Code:
    Add(1018)
    Sub (a4)
    Mul(b2)
    c=Div(a3)
    Print(
    c
    Code xử lý :
    Visual C# Code:
    1. using System;
    2. using System.Collections.Generic;
    3. using System.Text;
    4. using System.IO;
    5. using System.Collections;
    6. using System.Reflection;
    7.  
    8. namespace SimpleScriptingEngine
    9. {
    10.     class Program
    11.     {
    12.         static double Add(double a, double b)
    13.         {
    14.             return (a + b);
    15.         }
    16.  
    17.         static double Sub(double a, double b)
    18.         {
    19.             return (a - b);
    20.         }
    21.  
    22.         static double Mul(double a, double b)
    23.         {
    24.             return (a * b);
    25.         }
    26.  
    27.         static double Div(double a, double b)
    28.         {
    29.             return (a / b);
    30.         }
    31.  
    32.         static void Print(double a)
    33.         {
    34.             Console.WriteLine(a.ToString());
    35.         }
    36.        
    37.  
    38.        
    39.         class ScriptInfo
    40.         {
    41.             public string funcName = string.Empty;
    42.             public string retnVarName = string.Empty;
    43.             public string[] funcParams = new string[0];
    44.  
    45.             public override string ToString()
    46.             {
    47.                 string s = "";
    48.  
    49.                 if (retnVarName.Length > 0)
    50.                 {
    51.                     s = retnVarName + " = ";
    52.                 }
    53.  
    54.                 s += funcName + "(";
    55.  
    56.                 for (int i = 0; i < funcParams.Length; i++)
    57.                 {
    58.                     if (i > 0)
    59.                         s += ", ";
    60.                     s += funcParams[i];
    61.                 }
    62.  
    63.                 s += ")";
    64.  
    65.                 return s;
    66.             }
    67.         }        
    68.  
    69.  
    70.         static void Main(string[] args)
    71.         {
    72.             Console.Title = "Simple Script";
    73.            
    74.             Hashtable vars = new Hashtable();
    75.  
    76.             string[] sar = File.ReadAllLines(args[0]);
    77.             ScriptInfo[] script = new ScriptInfo[sar.Length];
    78.  
    79.             for (int i = 0; i < script.Length; i++)
    80.             {
    81.                 ScriptInfo sc = ParseScript(sar[i]);
    82.                 script[i] = sc;
    83.  
    84.                 string retnVarName = sc.retnVarName;
    85.  
    86.                 if (sc != null)
    87.                 {
    88.                     if (retnVarName.Length > 0)
    89.                     {
    90.                         if (vars[retnVarName] == null)
    91.                         {
    92.                             vars.Add(retnVarName, 0);
    93.                         }
    94.                     }
    95.                 }
    96.                 else
    97.                 {
    98.                     throw new Exception("Script parser error");
    99.                 }
    100.  
    101.             }
    102.            
    103.  
    104.             object obj = new Program();
    105.             Type type = obj.GetType();
    106.  
    107.             for (int i = 0; i < script.Length; i++)
    108.             {
    109.                 ScriptInfo sc = script[i];
    110.                 MethodInfo method = FindMethod(type, sc.funcName);
    111.                 if (method == null)
    112.                     throw new Exception("Script command not found");
    113.  
    114.                 object[] funcParams = new object[sc.funcParams.Length];
    115.                 for (int j = 0; j < funcParams.Length; j++)
    116.                 {
    117.                     string paramName = sc.funcParams[j];
    118.                     double num = 0;
    119.  
    120.                     if (!double.TryParse(paramName, out num))
    121.                     {
    122.                         if (vars[paramName] == null)
    123.                             throw new Exception("Variable not found");
    124.  
    125.                         double.TryParse(vars[paramName].ToString(), out num);
    126.                     }
    127.  
    128.                     funcParams[j] = num;
    129.  
    130.                 }
    131.  
    132.                 vars[sc.retnVarName] = method.Invoke(obj, funcParams);
    133.             }
    134.  
    135.  
    136.  
    137.             Console.ReadKey();
    138.         }
    139.  
    140.         static MethodInfo FindMethod(Type type, string name)
    141.         {
    142.             MethodInfo []mi = type.GetMethods(BindingFlags.Static | BindingFlags.NonPublic | BindingFlags.Public);
    143.  
    144.             for (int i = 0; i < mi.Length; i++)
    145.             {
    146.                 if (mi[i].Name == name)
    147.                     return mi[i];
    148.             }
    149.  
    150.             return null;
    151.         }
    152.  
    153.         static ScriptInfo ParseScript(string s)
    154.         {
    155.             ScriptInfo sc = new ScriptInfo();
    156.  
    157.             string s2 = s.Trim();
    158.             string[] sar = s2.Split('=');
    159.  
    160.             if (sar.Length > 2)
    161.             {
    162.                 return null;
    163.             }
    164.             else if (sar.Length == 2)
    165.             {
    166.                 sc.retnVarName = sar[0].Trim();
    167.                 s2 = sar[1].Trim();
    168.             }
    169.  
    170.             int pos = s2.IndexOf('(');
    171.             if (pos < 0)
    172.                 return null;
    173.  
    174.             sc.funcName = s2.Substring(0, pos).Trim();
    175.             s2 = s2.Substring(pos + 1);
    176.  
    177.             pos = s2.IndexOf(')');
    178.             if (pos < 0)
    179.                 return null;
    180.  
    181.             s2 = s2.Substring(0, pos).Trim();
    182.             sar = s2.Split(',');
    183.  
    184.             for (int i = 0; i < sar.Length; i++)
    185.             {
    186.                 sar[i] = sar[i].Trim();
    187.             }
    188.  
    189.             sc.funcParams = sar;
    190.  
    191.             return sc;
    192.         }
    193.  
    194.  
    195.     }
    196. }
    Càng yêu mèo thì mèo càng mập. Mèo càng mập ta lại càng yêu.

Các đề tài tương tự

  1. làm sao để gửi nội dung có sẵn trong file text vào chương trình winword đang chạy
    Gửi bởi doveandrose trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 2
    Bài viết cuối: 17-11-2012, 07:45 PM
  2. Loại bỏ text trùng nhau từ một file text(.txt) - File văn bản
    Gửi bởi bossnabito trong diễn đàn Thắc mắc chung
    Trả lời: 7
    Bài viết cuối: 31-07-2011, 03:34 AM
  3. Đọc dữ liệu file midi dạng số HEX và lấy lời nhạc trong file ra file text
    Gửi bởi kimngockhtn_2007 trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 0
    Bài viết cuối: 29-06-2011, 04:40 PM
  4. Text File Protector - Bảo vệ file text bằng password (siêu ẩn)
    Gửi bởi gianghoplus trong diễn đàn Sản phẩm phần mềm của bạn
    Trả lời: 10
    Bài viết cuối: 08-05-2009, 09:27 AM
  5. Đọc file text? Đọc file dung lượng lớn? Lỗi lưu kết quả khi đọc nhiều lần?
    Gửi bởi totoise trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 6
    Bài viết cuối: 19-04-2009, 08:21 PM

Quyền hạn của bạn

  • Bạn không thể gửi đề tài mới
  • Bạn không thể gửi bài trả lời
  • Bạn không thể gửi các đính kèm
  • Bạn không thể chỉnh sửa bài viết của bạn