Files
Xune/UIX.Skia/SSVParseLib/SSLex.cs
T

144 lines
5.3 KiB
C#
Raw Normal View History

2021-07-12 00:40:39 -05:00
// Decompiled with JetBrains decompiler
// Type: SSVParseLib.SSLex
// Assembly: UIX, Version=4.8.0.0, Culture=neutral, PublicKeyToken=ddd0da4d3e678217
// MVID: A56C6C9D-B7F6-46A9-8BDE-B3D9B8D60B11
// Assembly location: C:\Program Files\Zune\UIX.dll
using Microsoft.Iris.Session;
namespace SSVParseLib
{
internal class SSLex
{
private int m_state;
private char[] m_currentChar;
private SSLexTable m_table;
private SSLexConsumer m_consumer;
public bool m_hasErrors;
public SSLex(SSLexTable q_table, SSLexConsumer q_consumer)
{
q_table.Reset();
m_table = q_table;
m_consumer = q_consumer;
m_currentChar = new char[1];
}
public void Reset(SSLexConsumer consumer)
{
m_table.Reset();
m_consumer = consumer;
m_currentChar[0] = char.MinValue;
m_state = 0;
m_hasErrors = false;
}
public SSLexConsumer consumer() => m_consumer;
public virtual bool error(SSLexLexeme q_lexeme)
{
m_hasErrors = true;
string message = string.Format("Syntax Error: Unexpected character encountered: '{0}'", m_currentChar[0]);
ErrorManager.ReportError(q_lexeme.line(), q_lexeme.offset() + q_lexeme.length() - 1, message);
return true;
}
public bool HasErrors => m_hasErrors;
public virtual bool complete(SSLexLexeme q_lexeme) => true;
public SSLexLexeme next()
{
SSLexLexeme ssLexLexeme = null;
while (true)
{
SSLexMark? q_mark;
SSLexFinalState q_final;
do
{
m_state = 0;
bool flag = false;
q_mark = new SSLexMark?();
q_final = m_table.lookupFinal(m_state);
if (q_final.isFinal())
m_consumer.mark();
while (m_consumer.next())
{
flag = true;
m_currentChar[0] = m_consumer.getCurrent();
m_state = m_table.lookup(m_state, m_currentChar[0]);
if (m_state != -1)
{
SSLexFinalState ssLexFinalState = m_table.lookupFinal(m_state);
if (ssLexFinalState.isFinal())
{
q_mark = new SSLexMark?(m_consumer.mark());
q_final = ssLexFinalState;
}
if (ssLexFinalState.isContextStart())
{
SSLexMark? nullable = new SSLexMark?(m_consumer.mark());
}
}
else
break;
}
if (flag)
{
if (q_final.isContextEnd() && q_mark.HasValue)
m_consumer.flushEndOfLine(ref q_mark);
if (q_final.isIgnore() && q_mark.HasValue)
{
m_consumer.flushLexeme(q_mark.Value);
if (q_final.isPop() && q_final.isPush())
m_table.gotoSubtable(q_final.pushIndex());
else if (q_final.isPop())
m_table.popSubtable();
}
else
goto label_19;
}
else
goto label_34;
}
while (!q_final.isPush());
m_table.pushSubtable(q_final.pushIndex());
continue;
label_19:
if (!q_final.isFinal() || !q_mark.HasValue)
{
ssLexLexeme = new SSLexLexeme(m_consumer);
if (!error(ssLexLexeme))
{
m_consumer.flushLexeme();
ssLexLexeme = null;
}
else
break;
}
else
{
if (q_final.isPop() && q_final.isPush())
m_table.gotoSubtable(q_final.pushIndex());
else if (q_final.isPop())
m_table.popSubtable();
else if (q_final.isPush())
m_table.pushSubtable(q_final.pushIndex());
if (q_final.isStartOfLine() && m_consumer.line() != 0 && m_consumer.offset() != 0)
m_consumer.flushStartOfLine(ref q_mark);
ssLexLexeme = new SSLexLexeme(m_consumer, q_final, q_mark.Value);
if (q_final.isKeyword())
m_table.findKeyword(ssLexLexeme);
m_consumer.flushLexeme(q_mark.Value);
if (!complete(ssLexLexeme))
ssLexLexeme = null;
else
break;
}
}
label_34:
return ssLexLexeme;
}
}
}