jackfiled
4b6635796c
Co-authored-by: Huaps <1183155719@qq.com> Co-authored-by: duqoo <92306417+duqoo@users.noreply.github.com> Reviewed-on: PostGuard/Canon#38
84 lines
2.0 KiB
C#
84 lines
2.0 KiB
C#
namespace Canon.Core.LexicalParser;
|
|
|
|
public static class LexRules
|
|
{
|
|
// 保留关键字
|
|
private static readonly string[] _keywords =
|
|
[
|
|
"Program", "Const", "Var", "Procedure",
|
|
"Function", "Begin", "End", "Array",
|
|
"Of", "If", "Then", "Else",
|
|
"For", "To", "Do", "Integer",
|
|
"Real", "Boolean", "Character", "Divide",
|
|
"Not", "Mod", "And", "Or"
|
|
];
|
|
|
|
private static readonly string[] _delimiter = [";", ",", ":", ".", "(", ")", "[", "]", "'", "\"", ".."];
|
|
|
|
private static readonly string[] _operator = ["=", "<>", "<", "<=", ">", ">=", "+", "-", "*", "/", ":="];
|
|
|
|
// 判断字符
|
|
public static bool IsDigit(char _ch) {
|
|
if (_ch >= '0' && _ch <= '9') return true;
|
|
return false;
|
|
}
|
|
|
|
public static bool IsHexDigit(char _ch)
|
|
{
|
|
if ((_ch >= '0' && _ch <= '9') || (_ch<= 'F' && _ch >= 'A')) return true;
|
|
return false;
|
|
}
|
|
|
|
public static bool IsLetter(char _ch) {
|
|
if ((_ch >= 'A' && _ch <= 'Z') || (_ch >= 'a' && _ch <= 'z' || _ch == '_')) {
|
|
return true;
|
|
}
|
|
return false;
|
|
}
|
|
|
|
public static bool IsKeyword(string tokenString)
|
|
{
|
|
|
|
foreach (var t in _keywords)
|
|
{
|
|
if (string.Equals(tokenString, t, StringComparison.OrdinalIgnoreCase)) return true;
|
|
}
|
|
return false;
|
|
}
|
|
|
|
|
|
public static bool IsDelimiter(char ch)
|
|
{
|
|
foreach (var delimiter in _delimiter)
|
|
{
|
|
if (delimiter.Contains(ch))
|
|
{
|
|
return true;
|
|
}
|
|
}
|
|
return false;
|
|
}
|
|
|
|
public static bool IsOperator(char ch)
|
|
{
|
|
foreach (var o in _operator)
|
|
{
|
|
if (o.Contains(ch))
|
|
{
|
|
return true;
|
|
}
|
|
}
|
|
return false;
|
|
}
|
|
|
|
public static bool IsBreakPoint(char ch)
|
|
{
|
|
if (ch == ' ' || ch == '\n' || ch == '\t' || ch == '\r')
|
|
{
|
|
return true;
|
|
}
|
|
|
|
return false;
|
|
}
|
|
}
|