Example #1
0
        internal DslToken(DslLog log, string input)
        {
            mLog      = log;
            mInput    = input;
            mIterator = 0;

            mLineNumber     = 1;
            mLastLineNumber = 1;

            mKeywords          = new Dictionary <string, short>();
            mKeywords["true"]  = DslConstants.TRUE_;
            mKeywords["false"] = DslConstants.FALSE_;

            mCurToken  = string.Empty;
            mLastToken = string.Empty;

            mCommentBuilder   = new StringBuilder();
            mComments         = new List <string>();
            mCommentOnNewLine = false;

            mTokenBuilder = new StringBuilder();

            mStringBeginDelimiter = string.Empty;
            mStringEndDelimiter   = string.Empty;
            mScriptBeginDelimiter = string.Empty;
            mScriptEndDelimiter   = string.Empty;
        }
Example #2
0
        internal DslToken(DslLog log, string input)
        {
            mLog = log;
            mInput = input;
            mIterator = 0;

            mLineNumber = 1;
            mLastLineNumber = 1;

            mKeywords["true"] = DslConstants.TRUE_;
            mKeywords["false"] = DslConstants.FALSE_;
        }
Example #3
0
        internal DslToken(DslLog log, string input)
        {
            mLog      = log;
            mInput    = input;
            mIterator = 0;

            mLineNumber     = 1;
            mLastLineNumber = 1;

            mKeywords["true"]  = DslConstants.TRUE_;
            mKeywords["false"] = DslConstants.FALSE_;
        }
Example #4
0
        internal DslAction(DslLog log, List <ISyntaxComponent> datas)
        {
            mLog         = log;
            mScriptDatas = datas;

            mSemanticStack          = new Stack <SemanticInfo>();
            mStatementSemanticStack = new Stack <StatementData>();

            mGetLastToken       = null;
            mGetLastLineNumber  = null;
            mGetComments        = null;
            mSetStringDelimiter = null;
            mSetScriptDelimiter = null;
        }
Example #5
0
        internal DslToken(DslLog log, string input)
        {
            mLog      = log;
            mInput    = input;
            mIterator = 0;

            mLineNumber     = 1;
            mLastLineNumber = 1;

            mCurToken  = string.Empty;
            mLastToken = string.Empty;

            mCommentBuilder   = new StringBuilder();
            mComments         = new List <string>();
            mCommentOnNewLine = false;

            mTokenBuilder = new StringBuilder();

            mStringBeginDelimiter = string.Empty;
            mStringEndDelimiter   = string.Empty;
            mScriptBeginDelimiter = string.Empty;
            mScriptEndDelimiter   = string.Empty;
        }
Example #6
0
        public bool LoadFromString(string content, string resourceName, DslLogDelegation logCallback)
        {
            #if FULL_VERSION
            mDslInfos.Clear();
            Parser.DslLog log = new Parser.DslLog();
            log.OnLog += logCallback;
            Parser.DslToken tokens = new Parser.DslToken(log, content);
            Parser.DslError error = new Parser.DslError(log, tokens);
            Parser.RuntimeAction action = new Parser.RuntimeAction(mDslInfos);
            action.onGetLastToken = () => { return tokens.getLastToken(); };
            action.onGetLastLineNumber = () => { return tokens.getLastLineNumber(); };
            action.onGetComment = (out bool commentOnNewLine) => { commentOnNewLine = tokens.IsCommentOnNewLine(); List<string> ret = new List<string>();ret.AddRange(tokens.GetComments()); tokens.ResetComments(); return ret; };
            action.onSetStringDelimiter = (string begin, string end) => { tokens.setStringDelimiter(begin, end); };
            action.onSetScriptDelimiter = (string begin, string end) => { tokens.setScriptDelimiter(begin, end); };

            Parser.DslParser.parse(action, tokens, error, 0);
            if (error.HasError) {
                for (int i = 0; i < mDslInfos.Count; i++) {
                    mDslInfos[i].Clear();
                }
            } else {
                for (int i = 0; i < mDslInfos.Count; i++) {
                    mDslInfos[i].SetResourceName(resourceName);
                }
            }
            return !error.HasError;
            #else
              return false;
            #endif
        }
Example #7
0
        public string GenerateBinaryCode(string content, Dictionary<string, string> encodeTable, DslLogDelegation logCallback)
        {
            #if FULL_VERSION
            List<DslInfo> infos = new List<DslInfo>();
            Parser.DslLog log = new Parser.DslLog();
            log.OnLog += logCallback;
            Parser.DslToken tokens = new Parser.DslToken(log, content);
            Parser.DslError error = new Parser.DslError(log, tokens);
            Parser.RuntimeAction action = new Parser.RuntimeAction(infos);
            action.onGetLastToken = () => { return tokens.getLastToken(); };
            action.onGetLastLineNumber = () => { return tokens.getLastLineNumber(); };
            action.onSetStringDelimiter = (string begin, string end) => { tokens.setStringDelimiter(begin, end); };
            action.onSetScriptDelimiter = (string begin, string end) => { tokens.setScriptDelimiter(begin, end); };
            Parser.DslParser.parse(action, tokens, error, 0);
            if (error.HasError) {
                return string.Empty;
            } else {
                MemoryStream stream = new MemoryStream();
                List<string> identifiers = new List<string>();
                foreach (DslInfo info in infos) {
                    Utility.writeBinary(stream, identifiers, (StatementData)info);
                }

                byte[] bytes = stream.ToArray();
                SortedDictionary<string, int> dict = new SortedDictionary<string, int>();
                int ct = identifiers.Count;
                if (ct > 0x00004000) {
                    System.Diagnostics.Debug.Assert(false);
                    //Console.WriteLine("Identifiers count {0} too large than 0x04000", ct);
                    return string.Empty;
                }
                for (int i = 0; i < ct; ++i) {
                    string key = identifiers[i];
                    key = Encode(key, encodeTable);
                    identifiers[i] = key;
                    if (!dict.ContainsKey(key)) {
                        dict.Add(key, 0);
                    }
                }
                List<string> keys = new List<string>(dict.Keys);
                byte[] bytes2;
                using (MemoryStream ms = new MemoryStream()) {
                    for (int i = 0; i < ct; ++i) {
                        string key = identifiers[i];
                        int ix = keys.BinarySearch(key);
                        if (ix < 0x80) {
                            ms.WriteByte((byte)ix);
                        } else {
                            ms.WriteByte((byte)((ix & 0x0000007f) | 0x00000080));
                            ms.WriteByte((byte)(ix >> 7));
                        }
                    }
                    bytes2 = ms.ToArray();
                }
                return string.Format("{0}|{1}|{2}", Convert.ToBase64String(bytes), Convert.ToBase64String(bytes2), string.Join("`", keys.ToArray()));
            }
            #else
              return string.Empty;
            #endif
        }
Example #8
0
 internal RuntimeAction(DslLog log, List <DslInfo> datas)
 {
     mLog         = log;
     mScriptDatas = datas;
 }
Example #9
0
 internal DslError(DslLog log)
 {
     mLog      = log;
     mHasError = false;
 }
Example #10
0
 internal DslError(DslLog log, DslToken tokens)
 {
     mLog   = log;
     mToken = tokens;
 }
Example #11
0
 internal DslError(DslLog log)
 {
     mLog = log;
 }
Example #12
0
File: Dsl.cs Project: CQiao/DSL
    public bool LoadFromString(string content, string resourceName, DslLogDelegation logCallback)
    {
#if FULL_VERSION
      mDslInfos.Clear();
      Parser.DslLog log = new Parser.DslLog();
      log.OnLog += logCallback;
		  Parser.DslToken tokens = new Parser.DslToken(log, content);
		  Parser.DslError error = new Parser.DslError(log, tokens);
      Parser.RuntimeAction action = new Parser.RuntimeAction(mDslInfos);
      action.onGetLastToken = () => { return tokens.getLastToken(); };
      action.onGetLastLineNumber = () => { return tokens.getLastLineNumber(); };
		  Parser.DslParser.parse(action,tokens,error,0);
		  if(error.HasError)
		  {
        for (int i = 0; i < mDslInfos.Count; i++ )
        {
          mDslInfos[i].Clear();
        }
		  }
      else
      {
        for (int i = 0; i < mDslInfos.Count; i++)
        {
          mDslInfos[i].SetResourceName(resourceName);
        }
		  }
		  return !error.HasError;
#else
      return false;
#endif
    }
Example #13
0
 internal DslError(DslLog log, DslToken tokens)
 {
     mLog = log;
     mToken = tokens;
 }