Time of Update: 2017-02-27
在之前的六篇文章中,我比較詳細的介紹了與詞法分析器相關的演算法。它們都比較關注於實現的細節,感覺上可能比較淩亂,本篇就從整體上介紹一下如何定義詞法分析器,以及如何?自己的詞法分析器。第二節完整的介紹了如何定義詞法分析器,可以當作一個詞法分析器使用指南。如果不關心詞法分析器的具體實現的話,可以只看第二節。一、類庫的改變首先需要說明一下我對類庫做的一些修改。詞法分析部分的介面,與當初寫《C# 詞法分析器》系列時相比,已經發生了不小的改變,有必要做一下說明。1. 詞法單元的標識符詞法單元(token)
Time of Update: 2017-02-27
最近一直被C#調用Haskell時的“嘗試讀取或寫入受保護的記憶體”問題所困擾(詳見C#調用haskell遭遇Attempted to read or write protected memory,C#調用haskell時的“嘗試讀取或寫入受保護的記憶體”問題),而且困在其中,越陷超深,無法自拔,差點棄用C#解決我們面臨的問題。問題是這樣的,只要在Haskell代碼中對字串進行操作,在C#調用時就會引發異常:An unhandled
Time of Update: 2017-02-27
什麼是介面?介面就是一種規範,協議(*),約定好遵守某種規範就可以寫通用的代碼。定義了一組具有各種功能的方法。介面描述的是一種能力,具有這種能力的事物可以沒任何關係。比如:public interface IFly{void fly();}實現這個介面的可以是飛機,鳥等,他們都有飛的能力但沒什麼關係。而抽象類別就不同了。介面解決了類的多繼承的問題介面解決了類繼承以後體積龐大的問題。介面之間可以實現多繼承介面中的成員必須不能有實現(沒實現說白了就是不能有大括弧哦),介面不能執行個體化。
Time of Update: 2017-02-27
【系統內容】Windows Server 2008 R2,Haskell Platform 2013.2.0.0,ghc 7.6.3,cabal 1.16.0【操作步驟】1. 安裝Windows版Haskell Platform(不支援Windows Server 2012),Haskell Platform整合了cabal(相當於.NET中的msbuild+nuget), ghc(Glasgow Haskell Compiler,Haskell編譯器)2.
Time of Update: 2017-02-27
環境: VS2010, Win71. 添加新項目->Win32項目 輸入名稱:CSInvokeCDll2.應用程式設定中選擇DLL然後點擊完成3 在CSharpInvokeCPP.CPP中書寫C代碼#include "stdafx.h" #include "malloc.h" #include "userinfo.h" typedef struct { char name[
Time of Update: 2017-02-27
本文簡單介紹C#項目中讀取並修改App.config檔案的方法,AppConfig最重要的功能就是它將命令列選項和設定檔選項統一到一種資料結構中。1. 向C#項目執行個體中的項目添加app.config檔案:右擊C#項目執行個體中項目名稱,選擇“添加”→“添加建立項”,在出現的“添加新項”對話方塊中,選擇“添加應用程式設定檔”;如果項目以前沒有設定檔,則預設的檔案名稱為“app.
Time of Update: 2017-02-27
如果不知道MapReduce是怎麼工作的,請看這裡,如果不知道MapReduce是什麼,請google之!今天“閑”來無事,忽想起C#裡沒有MapReduce的方法,構思之,coding之:#region IEnumerable<T>.MapReduce public static Dictionary<TKey, TResult> MapReduce<TInput, TKey, TValue, TResult>(
Time of Update: 2017-02-27
前言:由於js 遠程請求 XMLHttpRequest() 不支援多線程,所以用C# 寫了個dll 多線程遠程抓住供js調用。最初代碼為:C#代碼/// <summary> /// 非同步請求入口 /// </summary> /// <param name="url">傳入http地址 注意加http</param> /// <param
Time of Update: 2017-02-27
今天心情不錯,要知道我們在平時的工作日沒這麼長時間膩歪在一起。現在我把在前段日子做的項目裡,遇到的一個小問題來好好的總結一下。因為我們這個項目是用Java寫的服務端發布WebService,用戶端呢使用C#來調用WebService(本人以前搞過一段時間C#用戶端,還總結了一個MVP架構AngelFrame,發布在:http://www.cnblogs.com/wgp13x/p/99c2adc52d8f0dff30a038841ac32872.html),當然C#調用Java發布的WebServ
Time of Update: 2017-02-27
我們在項目裡經常要涉及到各模組間的通訊,這其中又不可避免要碰到各類語言間之間的通訊,比如之前做的一個項目裡面就是Java發的訊息需要C#接收,(具體訊息是怎麼傳輸的可以使用RabbitMQ等,關於RabbitMQ的使用總結可以看我之前的部落格),都是物件導向的語言,而物件導向的訊息怎麼反解析到C#是個難題。下面就是使用Json密器讓Java和C#溝通的具體辦法的總結。摘要:Json是Java和C#之間通訊的利器,Java端將Java對象轉變為Json串後發出,C#端接收到Json串後轉換為C#對
Time of Update: 2017-02-27
語言: C#在登陸Linux系統的時候,體驗過在Linux的shell命令列視窗中輸入使用者密碼嗎? 下面體驗下在Windows控制台中輸入密碼的方式Showing Effect/// <summary>/// Read password from console/// </summary>/// <returns>password</returns>public static string ReadPassword(){
Time of Update: 2017-02-27
通常C#使用基於XML的設定檔,不過如果有需要的話,比如要兼顧較老的系統,可能還是要用到INI檔案。但C#本身並不具備讀寫INI檔案的API,只有通過調用Unmanaged 程式碼的方式,即系統自身的API才能達到所需的目的。對應讀寫的方法分別為GetPrivateProfileString和WritePrivateProfileString。GetPrivateProfileString中的各參數:lpAppName —— section的名稱lpKeyName
Time of Update: 2017-02-27
在Java 7中增加了新的一個方法——probeContentType,其主要作用是可以判斷檔案的content type。相應代碼如下所示:import java.io.IOException; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; public class FileContentType { public static
Time of Update: 2017-02-27
通過集合枚舉在本質上不是一個安全執行緒的過程。甚至在對集合進行同步處理時,其他線程仍可以修改該集合,這會導致枚舉數引發異常。若要在枚舉過程中保證安全執行緒,可以在整個枚舉過程中鎖定集合,或者捕捉由於其他線程進行的更改而引發的異常。下列樣本說明如何同步 Queue、如何確定 Queue 是否同步以及如何使用同步的 Queue。Unity3D教程手冊using System; using System.Collections; public class
Time of Update: 2017-02-27
現在對做的系統要求要越來越靈活,功能配置越來越方便,犧牲一小部分的效率,而換取系統的靈活性,對於維護、功能擴充升級等工作提供了很大的方便。前兩天,一個項目要求介面上的按鈕都是可以配置的,位置和功能都是可配置的。位置好說,用xml即可。但是功能可配置就有點難度了。如果說使用介面,那麼參數則不好設定,而且就算用介面,在實際調用時,也得明確執行個體化哪個類。您可能還會說用反射,嗯,這的確是個好辦法,但是還是在調用的時候,參數不確定,反射也就無用武之地了。查了半天,最終還是選擇了動態編譯。用一個專門的類
Time of Update: 2017-02-27
哈哈,說實話,個人看著這麼長的三元操作也麻煩,但是我也只想到了這樣三元判斷句中執行方法體能夠寫到一行,追求的終極目的是,用一行實現這個過程,而且簡單,由於篇幅,我就不截圖我其實是放在一行上的討論的重點是怎麼做的更極致,而不是這樣搞規範不規範,求更有創意的寫法。。。。。 。。華麗麗的分割線。。 。。var turecolor = colorJToken.OfType<JProperty>().Sum(d => (int)d.Value <<
Time of Update: 2017-02-27
聲明IEnumerator的枚舉數要建立非泛型介面的枚舉數,必須聲明實現IEnumerator介面的類,IEnumerator介面有如下特性:1、她是System.Collections命名空間的成員2、它包含3個方法Current、MoveNext和Reset例如:下面代碼實現了一個列出顏色名數組的枚舉數類:using System.Collections; class ColorEnumerator:IEnumerator{ string [] Colors;
Time of Update: 2017-02-27
多態
Time of Update: 2017-02-27
為了開始對實現既有介面的瞭解,我們就看一下IEnumerable和IEnumerator的作用,想一下,C#支援關鍵字foreach,允許我們遍曆任何數群組類型的內容://遍曆數組的項int[] myArray={10,20,30}foreach(int i in myArray){......}雖然看上去只有數群組類型才能使用這個結構,其實任何支援GetEnumerator()方法的類型都可以通過foreach結構進行運算,舉例說明,我們建立一個項目。首先,我們建立一個類public
Time of Update: 2017-02-27
最近做的項目需要在註冊表中記錄一些使用者佈建,方便在程式下次啟動時讀取設定,應用上次使用者儲存的設定,挺簡單的。寫出來,方便記憶,以後要用,可以直接改改就能用。using System; namespace Backend{ public class RegistryStorage { public static PageVisibility OpenAfterStart() {