SyntaxAnalyse/SyntaxTreeAnalyse.cs
(开头部分) 11KB这里只显示每个文件的开头 60 行。登录后可以解锁完整代码。
//xxxxxxxxxxx
using System;
using System.Collections.Generic;
using System.Text;
//xxxxxxxxx
//Email: alexleo321@hotmail.com
//Blog: xxxxxxxxxxx
namespace ConExpress.Calculator
{
/// <summary>
/// 语法树分析
/// </summary>
/// <remarks>xxxxxxxxx</remarks>
internal class SyntaxTreeAnalyse
{
/// <summary>
/// 记号段提取,提取顶级操作记号的Hash
/// </summary>
/// <param name="IndexStart">起始序号</param>
/// <param name="IndexEnd">结束序号</param>
/// <returns>传入记号段的顶级操作记号记录对象的Hash</returns>
/// <remarks>xxxxxxxxx</remarks>
internal static TokenRecord SyntaxTreeGetTopTokenAnalyse(List<TokenRecord> TokenList, int IndexStart, int IndexEnd)
{
int intIndexCurrent = IndexStart;//当前处理序号
int intIndexSubStart = IndexStart;//子记号段的起始序号
TokenRecord Token;//获取当前Token
Stack<TokenRecord> StackCompart = new Stack<TokenRecord>();//括号堆栈
Stack<TokenRecord> StackOperate = new Stack<TokenRecord>();//操作记号堆栈
for (int intIndex = IndexStart; intIndex <= IndexEnd; intIndex++)
{
Token = TokenList[intIndex];
intIndexCurrent = intIndex;
if (Token is TokenLeftBracket)
{
StackCompart.Push(TokenList[intIndexCurrent]);//把左括号压栈
//获取该括号对中包含的记号段
intIndexSubStart = intIndexCurrent + 1;//设置子记号段的起始序号
//提取记号段
//如果语法错误,比如在记号段的末尾没有配对的右括号记号,则会出错,这里假设为语法正确
while (StackCompart.Count > 0)
{
intIndexCurrent += 1;
if (intIndexCurrent >= TokenList.Count)
{
//Error or auto add lossed bracket
throw new SyntaxException(Token.Index, Token.Length, "缺少配对的括号");
}
if (TokenList[intIndexCurrent] is TokenLeftBracket)
{
StackCompart.Push(TokenList[intIndexCurrent]);
}
else if (TokenList[intIndexCurrent] is TokenRightBracket)
{
StackCompart.Pop();
}
}
后面还有 199 行代码,解锁后查看完整代码
24 小时内免费解锁 3 个项目,之后 1 算力/个。 规则说明
AI 解读 AI
登录后可用,每次 10 算力,解读结果公开显示在下面。
还没有人解读过这个文件。