none
C# 腳本引擎 RRS feed

  • 問題

  • 剛剛翻過以前的文章才發現 我以前也問過一樣的問題@@

    但是之前的問題已經解決了

    現在我的腳本引擎已經可以實作Dim While等變數紀錄及迴圈判斷等

    Dim方面我是利用字串陣列去紀錄變數

    字串陣列的內容是變數名稱的長度+名字+值

    例如:

    我如果執行 Dim a = 10

    則dim[0] = 1a10

    如此一來在後面腳本取變數a時才可以判斷哪個是a的值

    我的問題是如果不知道使用者會怎麼打腳本

    例如:

    Dim a = 10

    dim a=10

    dim a    =     10

    因為我是先用Split('\n')分割出每行後再用Split(' ') (空白字元)去分割每個參數

    所以使用者如果沒有照我的格式打腳本就會錯誤

    請問要如何解決這個問題?


    我是個初學者 希望大家可以互相幫忙

    2014年10月1日 下午 12:48

解答

  • 那我建議你研究語法樹。

    http://stackoverflow.com/questions/10678242/developing-abstract-syntax-tree

    有了語法樹,你才有辦法去分析哪些是關鍵字,哪些是使用者字串,哪些是數值或是文字或其他型別。

    而且可能還要用上一些 Regular Expression。

    總之沒有你想的那麼簡單。


    強力監督SQL Injection問題!!

      • 小朱的技術隨手寫:http://www.dotblogs.com.tw/regionbbs/
      • 雲端學堂Facebook: http://www.facebook.com/studyazure

    2014年10月1日 下午 01:28
    版主

所有回覆

  • http://www.codeproject.com/Articles/2790/C-Script-Engine-tutorial

    強力監督SQL Injection問題!!

      • 小朱的技術隨手寫:http://www.dotblogs.com.tw/regionbbs/
      • 雲端學堂Facebook: http://www.facebook.com/studyazure

    2014年10月1日 下午 01:13
    版主
  • 更上流一點的作法: Roslyn Scripting API: http://visualstudiomagazine.com/articles/2011/11/16/the-roslyn-scripting-api.aspx

    強力監督SQL Injection問題!!

      • 小朱的技術隨手寫:http://www.dotblogs.com.tw/regionbbs/
      • 雲端學堂Facebook: http://www.facebook.com/studyazure

    2014年10月1日 下午 01:15
    版主
  • 我不打算使用任何元件

    想要自己判斷自己實作

    這樣這個腳本引擎才有意義吧....

    板上的kgame所做的KK Macro據他所說是使用介面再用類別去繼承

    如此可以完成每個指令的實作

    但前提還是必須先要判斷出使用者所打的指令


    我是個初學者 希望大家可以互相幫忙

    2014年10月1日 下午 01:19
  • 那我建議你研究語法樹。

    http://stackoverflow.com/questions/10678242/developing-abstract-syntax-tree

    有了語法樹,你才有辦法去分析哪些是關鍵字,哪些是使用者字串,哪些是數值或是文字或其他型別。

    而且可能還要用上一些 Regular Expression。

    總之沒有你想的那麼簡單。


    強力監督SQL Injection問題!!

      • 小朱的技術隨手寫:http://www.dotblogs.com.tw/regionbbs/
      • 雲端學堂Facebook: http://www.facebook.com/studyazure

    2014年10月1日 下午 01:28
    版主
  • 謝謝你的回答

    我知道沒有很簡單

    我的方法有點像土法煉鋼

    但確實也有效果

    所以想學習更有效率的方法


    我是個初學者 希望大家可以互相幫忙

    2014年10月1日 下午 01:35
  • 語法樹是最有效率的方法,其他的可能都事倍功半 (除了用人家寫好的 API)。

    強力監督SQL Injection問題!!

      • 小朱的技術隨手寫:http://www.dotblogs.com.tw/regionbbs/
      • 雲端學堂Facebook: http://www.facebook.com/studyazure

    2014年10月1日 下午 01:39
    版主
  • 請問用Regex是否可行?

    我是個初學者 希望大家可以互相幫忙

    2014年10月1日 下午 01:47
  • 面對簡單的可行,一複雜就無解了。

    強力監督SQL Injection問題!!

      • 小朱的技術隨手寫:http://www.dotblogs.com.tw/regionbbs/
      • 雲端學堂Facebook: http://www.facebook.com/studyazure

    2014年10月1日 下午 01:51
    版主
  • 這是 VB 語法吧...

    VB6 系列考慮記憶體共用,使用系統內建的 ScriptControl

    VBNET 可參考:http://tlcheng.twbbs.org/TLCheng/Net/NetList.aspx?Action=Module&Module=36


    不精確的問法,就會得到隨便猜的答案;自己都不肯花時間好好描述問題,又何必期望網友會認真回答?

    2014年10月1日 下午 03:11
  • 他說要自己刻...用 API 的就不用了 :)

    強力監督SQL Injection問題!!

      • 小朱的技術隨手寫:http://www.dotblogs.com.tw/regionbbs/
      • 雲端學堂Facebook: http://www.facebook.com/studyazure

    2014年10月1日 下午 03:20
    版主
  • 感謝前輩的回答

    目前是打算用regex去做判斷

    Regex.IsMatch(txt, "(dim\\s)\\s*.+\\s*=\\s*.+")

    分割出來再去分析字串然後統一格式


    我是個初學者 希望大家可以互相幫忙

    2014年10月6日 下午 12:06