-
Notifications
You must be signed in to change notification settings - Fork 31
T_Cyjb_Compilers_Lexers_Lexer_1
CYJB edited this page Mar 23, 2024
·
8 revisions
表示词法分析规则。
System.Object
Cyjb.Compilers.Lexers.Lexer(T, LexerController(T))
Cyjb.Compilers.Lexers.Lexer(T)
Namespace: Cyjb.Compilers.Lexers
Assembly: Cyjb.Compilers (in Cyjb.Compilers.dll) Version: 1.0.20+d347ea0351607fb282fdf60a5301f9cccb3ab27e
C#
public sealed class Lexer<T> : Lexer<T, LexerController<T>>
where T : struct, new()
- T
- 词法单元标识符的类型,一般是一个枚举类型。
名称 | 说明 | |
---|---|---|
Lexer(T) | Initializes a new instance of the Lexer(T) class |
名称 | 说明 | |
---|---|---|
Contexts | 获取词法分析器上下文列表。 (继承自 Lexer(T, TController)。) | |
TerminalMerge | 获取终结符的合并信息。 (继承自 Lexer(T, TController)。) |
名称 | 说明 | |
---|---|---|
DefineContext | 定义一个新的词法分析器的上下文。 (继承自 Lexer(T, TController)。) | |
DefineInclusiveContext | 定义一个新的词法分析器的包含型上下文。 (继承自 Lexer(T, TController)。) | |
DefineRegex | 定义一个指定名称的正则表达式。 (继承自 Lexer(T, TController)。) | |
DefineSymbol | 定义使用指定正则表达式的终结符。 (继承自 Lexer(T, TController)。) | |
Equals | Determines whether the specified object is equal to the current object. (继承自 Object。) | |
GetCharClassDescription | 返回最近一次构造的 DFA 的字符类描述信息。 (继承自 Lexer(T, TController)。) | |
GetData | 返回词法分析的数据。 (继承自 Lexer(T, TController)。) | |
GetFactory | 返回词法分析的工厂。 (继承自 Lexer(T, TController)。) | |
GetHashCode | Serves as the default hash function. (继承自 Object。) | |
GetStateDescription | 返回最近一次构造的 DFA 的状态描述信息。 (继承自 Lexer(T, TController)。) | |
GetType | Gets the Type of the current instance. (继承自 Object。) | |
ToString | Returns a string that represents the current object. (继承自 Object。) |
泛型参数 T 一般是一个枚举类型,用于标识词法单元。
对于词法分析中的冲突,总是选择最长的词素。如果最长的词素可以与多个模式匹配, 则选择最先被定义的模式。关于词法分析的相关信息,请参考我的系列博文 《C# 词法分析器(一)词法分析介绍》,词法分析器的使用指南请参见 《C# 词法分析器(七)总结》。
下面简单的构造一个数学算式的词法分析器:
enum Calc { Id, Add, Sub, Mul, Div, Pow, LBrace, RBrace }
Lexer<Calc> lexer = new Lexer<Calc>();
// 终结符的定义。
lexer.DefineSymbol("[0-9]+").Kind(Calc.Id).Action(c => c.Accept(int.Parse(c.Text)));
lexer.DefineSymbol("\\+").Kind(Calc.Add);
lexer.DefineSymbol("\\-").Kind(Calc.Sub);
lexer.DefineSymbol("\\*").Kind(Calc.Mul);
lexer.DefineSymbol("\\/").Kind(Calc.Div);
lexer.DefineSymbol("\\^").Kind(Calc.Pow);
lexer.DefineSymbol("\\(").Kind(Calc.LBrace);
lexer.DefineSymbol("\\)").Kind(Calc.RBrace);
// 吃掉所有空白。
lexer.DefineSymbol("\\s");
ILexerFactory<Calc> lexerFactory = lexer.GetFactory();
// 要分析的源文件。
string source = "1 + 20 * 3 / 4*(5+6)";
ITokenizer<Calc> tokenizer = lexerFactory.CreateTokenizer(source);
// 构造词法分析器。
foreach (Token<Calc> token in tokenizer)
{
Console.WriteLine(token);
}
《C# 词法分析器(七)总结》
-
CYJB 编译类库
- Cyjb.Compilers 命名空间
-
Cyjb.Compilers.Lexers 命名空间
- CharClass 类
- CharClassMap 类
- CharClassSet 类
- ContextData 类
- Dfa 类
- DfaData 类
- DfaState 类
- DfaStateData 类
- ILexerFactory(T) 接口
- ITerminalBuilder(T, TController) 接口
- Lexer(T) 类
-
Lexer(T, TController) 类
- Lexer(T, TController) 构造函数
- Lexer(T, TController) 属性
-
Lexer(T, TController) 方法
- Lexer(T, TController).DefineContext 方法
- Lexer(T, TController).DefineInclusiveContext 方法
- Lexer(T, TController).DefineRegex 方法
- Lexer(T, TController).DefineSymbol 方法
- Lexer(T, TController).GetCharClassDescription 方法
- Lexer(T, TController).GetData 方法
- Lexer(T, TController).GetFactory 方法
- Lexer(T, TController).GetStateDescription 方法
-
LexerController(T) 类
- LexerController(T) 构造函数
-
LexerController(T) 属性
- LexerController(T).ActionHandler 属性
- LexerController(T).Candidates 属性
- LexerController(T).Context 属性
- LexerController(T).InitialContext 属性
- LexerController(T).Kind 属性
- LexerController(T).SharedContext 属性
- LexerController(T).Source 属性
- LexerController(T).Span 属性
- LexerController(T).Start 属性
- LexerController(T).Text 属性
- LexerController(T).Value 属性
-
LexerController(T) 方法
- LexerController(T).Accept 方法
- LexerController(T).BeginContext 方法
- LexerController(T).CreateToken 方法
- LexerController(T).CreateTokenizeError 方法
- LexerController(T).Dispose 方法
- LexerController(T).EnterContext 方法
- LexerController(T).ExitContext 方法
- LexerController(T).More 方法
- LexerController(T).PopContext 方法
- LexerController(T).PushContext 方法
- LexerController(T).Reject 方法
- LexerController(T).SourceLoaded 方法
- LexerData(T) 类
- LexerFactory(T) 类
- LexerFactory(T, TController) 类
- LexerRunner(T) 类
- LexerTokenizer(T) 类
- Nfa 类
- NfaBuildResult 结构
- NfaState 类
- NfaStateType 枚举
- RejectOptions 枚举
- TerminalData(T) 类
- TrailingType 枚举
-
Cyjb.Compilers.Parsers 命名空间
- AssociativeType 枚举
- IParserFactory(T) 接口
- LRParser(T) 类
- ParseOptions 枚举
- Parser(T) 类
- Parser(T, TController) 类
- ParserAction 结构
- ParserActionType 枚举
-
ParserController(T) 类
- ParserController(T) 构造函数
- ParserController(T) 属性
-
ParserController(T) 方法
- ParserController(T).ConsumeTokens 方法
- ParserController(T).Dispose 方法
- ParserController(T).EmitParseError 方法
- ParserController(T).FilterTokens 方法
- ParserController(T).GetEnumerator 方法
- ParserController(T).GetItemAt 方法
- ParserController(T).GetNextState 方法
- ParserController(T).IndexOf 方法
- ParserController(T).PanicRecover 方法
- ParserController(T).Peek 方法
- ParserController(T).Read 方法
- ParserController(T).SyncState 方法
- ParserController(T).TokenizerLoaded 方法
- ParserController(T).TryRecover 方法
- ParserData 类
- ParserData(T) 类
- ParserFactory(T) 类
- ParserFactory(T, TController) 类
- ParserStateData(T) 类
- ProductionAction 类
- ProductionBuilder(T, TController) 类
- ProductionData(T) 类
- SymbolOptions 枚举
-
Cyjb.Compilers.RegularExpressions 命名空间
- AlternationExp 类
- AnchorExp 类
- CharClassExp 类
- ConcatenationExp 类
- EndOfFileExp 类
-
LexRegex 类
- LexRegex 构造函数
- LexRegex 属性
-
LexRegex 方法
- LexRegex.Alternate 方法
- LexRegex.AnyChar 方法
- LexRegex.BeginningOfLine 方法
- LexRegex.CheckRegex 方法
- LexRegex.Concat 方法
- LexRegex.EndOfLine 方法
- LexRegex.Equals 方法
- LexRegex.GetHashCode 方法
- LexRegex.Literal 方法
- LexRegex.LiteralIgnoreCase 方法
- LexRegex.Optional 方法
- LexRegex.Parse 方法
- LexRegex.Positive 方法
- LexRegex.Repeat 方法
- LexRegex.RepeatMaxTimes 方法
- LexRegex.RepeatMinTimes 方法
- LexRegex.Star 方法
- LexRegex.Symbol 方法
- LexRegex.SymbolIgnoreCase 方法
- LexRegex.ToString 方法
- LexRegex.Trailing 方法
- LexRegex 运算符
- LexRegex 字段
- LiteralExp 类
- QuantifierExp 类
- RegexCharClass 类
-
Cyjb.Text 命名空间
- EnumerableTokenizer(T) 类
- ITokenizer(T) 接口
- ITokenParser(T) 接口
- MissingTokenError(T) 类
- ParserNode(T) 类
- ParseStatus 枚举
- SourceMark 类
-
SourceReader 类
- SourceReader 构造函数
- SourceReader 属性
-
SourceReader 方法
- SourceReader.Accept 方法
- SourceReader.AcceptToken(T) 方法
- SourceReader.Close 方法
- SourceReader.Dispose 方法
- SourceReader.Drop 方法
- SourceReader.GetLinePositionSpan 方法
- SourceReader.GetPosition 方法
- SourceReader.GetReadedText 方法
- SourceReader.Mark 方法
- SourceReader.Peek 方法
- SourceReader.Read 方法
- SourceReader.ReadBlock 方法
- SourceReader.Release 方法
- SourceReader.Unget 方法
- SourceReader.UseLineLocator 方法
- SourceReader 字段
- Token(T) 类
- TokenCollection(T) 类
- TokenDisplayNameAttribute 类
- TokenizeError 类
- TokenizeErrorHandler(T) 委托
- TokenParseError 类
- TokenParseErrorHandler(T) 委托
- UnexpectedTokenError(T) 类