SyntaxAnalyse/TokenRecord/TokenFactory/TokenFactory.cs
(开头部分) 3KB这里只显示每个文件的开头 60 行。登录后可以解锁完整代码。
//xxxxxxxxxxx
using System;
using System.Collections.Generic;
using System.Text;
using System.Xml;
namespace ConExpress.Calculator
{
internal class TokenFactory
{
#region 更新记录
//Date:2008-6-12; xxxxxxxxx;
//Remark:将从XML文件中加载操作记号的方法合并到这里
#endregion
/// <summary>
/// 产生记号对象
/// </summary>
/// <param name="TokenWord">记号对应的字符串</param>
/// <param name="Index">记号开始的列序号</param>
/// <returns>记号对象</returns>
protected static TokenRecord ProduceToken(string TokenWord, int Index)
{
throw new Exception("必须在子类中实现方法");
}
/// <summary>
/// 词法分析
/// </summary>
/// <param name="TokenList">记号对象列表</param>
/// <param name="Code">表达式</param>
/// <param name="Index">列序号</param>
public static void LexicalAnalysis(List<TokenRecord> TokenList, string Code, ref int Index)
{
char chrTemp;//临时字符
for (int intIndex = 0; intIndex < Code.Length; intIndex++)
{
chrTemp = Code[intIndex];//获取当前字符
//关键字分析
if (char.IsLetter(chrTemp))//如果当前字符为字母,进行关键字处理
{
TokenKeywordFactory.LexicalAnalysis(TokenList, Code, ref intIndex);
}
else if (chrTemp.Equals('\'') || chrTemp.Equals('"'))//如果是字符串分隔符,进行字符串处理
{
TokenStringFactory.LexicalAnalysis(TokenList, Code, ref intIndex);
}
else if (char.IsDigit(chrTemp))//数值处理
{
TokenNumberFactory.LexicalAnalysis(TokenList, Code, ref intIndex);
}
else if (TokenSymbolFactory.GetSymbolDictionary().ContainsKey(chrTemp.ToString()))//运算符处理
{
//有些运算符为双字符,但这里所有的双字符运算符的前一个字符都有对应的单字符运算符,可以只考虑一个字符
TokenSymbolFactory.LexicalAnalysis(TokenList, Code, ref intIndex);
}
后面还有 40 行代码,解锁后查看完整代码
24 小时内免费解锁 3 个项目,之后 1 算力/个。 规则说明
AI 解读 AI
登录后可用,每次 10 算力,解读结果公开显示在下面。
还没有人解读过这个文件。