C#词法分析器之输入缓冲和代码定位的应用分析
一、输入缓冲 在介绍如何进行词法分析之前,先来说说一个不怎么被提及的问题——怎么从源文件中读取字符流。为什么这个问题这么重要呢?是因为在词法分析中,对字符流是有要求的,它必须能够支持回退操作(就是将多个字符放回到流中,以后会再次被读取)。先来解释下为什么需要支持回退操作,举个简单的例子来说,现在要对
一、输入缓冲 在介绍如何进行词法分析之前,先来说说一个不怎么被提及的问题——怎么从源文件中读取字符流。为什么这个问题这么重要呢?是因为在词法分析中,对字符流是有要求的,它必须能够支持回退操作(就是将多个字符放回到流中,以后会再次被读取)。先来解释下为什么需要支持回退操作,举个简单的例子来说,现在要对
虽然文章的标题是词法分析,但首先还是要从编译原理说开来。编译原理应该很多人都听说过,虽然不一定会有多么了解。简单的说,编译原理就是研究如何进行编译——也就如何从代码(*.cs 文件)转换为计算机可以执行的程序(*.exe 文件)。当然也有些语言如 JavaScript 是解释执行的,它的代码是直接被
通常C#使用基于XML的配置文件,不过如果有需要的话,比如要兼顾较老的系统,可能还是要用到INI文件。但C#本身并不具备读写INI文件的API,只有通过调用非托管代码的方式,即系统自身的API才能达到所需的目的。对应读写的方法分别为GetPrivateProfileString和WritePriva
整数转换为字符串:char *itoa( int value, char *string,int radix);小数转换为字符串:sprintf(串, 格式控制符列, 数据);字符串转小数:double atof(const char *nptr);字符串转整数:int atoi(const cha
该哈希算法为一个文件生成一个小的二进制“指纹”,从统计学的角度来看,不同的文件不可能生成相同的哈希码要生成一个哈希码,必须首先创建一个HashAlgorithm对象,通过HashAlgorithm.Create方法来完成。然后调用HashAlgorithm.ComputeHash方法,它会返回一个存
实现代码如下:using System;using System.Collections.Generic;using System.Text;namespace WindowsFormsApplication1{using System;using System.Drawing;using Syst
实现代码如下:[ThreadStatic]static char[] mTempChars;protected static char[] GetTempData(){if (mTempChars == null)mTempChars = new char[1024 * 64];return mTe
通过调用Win32 API实现。实现代码如下:public class User32API{private static Hashtable processWnd = null;public delegate bool WNDENUMPROC(IntPtr hwnd, uint lParam);st
在自然语言处理(NLP)研究中,NGram是最基本但也是最有用的一种比对方式,这里的N是需要比对的字符串的长度,而今天我介绍的TrieTree,正是和NGram密切相关的一种数据结构,有人称之为字典树。TrieTree简单的说是一种多叉树,每个节点保存一个字符,这么做的好处是当我们要做NGram比对
实现代码如下:using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Linq;using System