![]() |
1
27
我在这里发布的作为答案的原始版本有一个问题,它只在有多个“Regex”匹配当前表达式时才起作用。也就是说,只要一个正则表达式匹配,它就会返回一个令牌——而大多数人希望正则表达式是“贪婪的”。对于“带引号的字符串”之类的东西,情况尤其如此。 位于正则表达式顶部的唯一解决方案是逐行读取输入(这意味着您不能拥有跨越多行的令牌)。我可以接受这一点——毕竟,这是一个穷人的雷克瑟!此外,在任何情况下,从Lexer中获取行号信息通常都很有用。
示例程序:
输出:
|
![]() |
2
6
Irony 在CodePlex上。 Irony是一个用于在.NET平台上实现语言的开发工具包。它利用c#语言和.NET Framework 3.5的灵活性和强大功能,实现了一种全新的、精简的编译器构造技术。 与大多数现有的yacc/lex风格的解决方案不同,反讽不使用任何扫描程序或解析器代码生成,这些代码是从用专门的元语言编写的语法规范生成的。讽刺的是,目标语言语法直接用c#编码,使用运算符重载来表示语法结构。Irony的扫描器和解析器模块使用编码为c#类的语法来控制解析过程。有关c#类中的语法定义示例以及在工作解析器中使用它的示例,请参见表达式语法示例。 |
![]() |
3
5
除非你有一个非常非传统的语法,否则我会 建议不要使用自己的lexer/parser。 我通常发现C#的lexer/parser非常缺乏。然而,F#附带了fslex和fsyacc,您可以学习如何使用它们 in this tutorial 我想这并不是穷人的词法分析器,因为你必须学习一门全新的语言才能开始,但这是一个开始。 |
![]() |
4
2
改变我原来的答案。 看看 SharpTemplate 具有不同语法类型的解析器,例如。
它对每种类型的令牌使用正则表达式:
是这样用的吗
它从堆栈中推动和弹出以保持状态。 |
![]() |
6
0
爱尔兰大学的研究人员开发了一个部分实现,可以在以下链接中找到: Flex/Bison for C# 这绝对可以被认为是一个“可怜的男人词法分析器”,因为他的实现似乎仍然存在一些问题,例如没有预处理器,存在“悬而未决的其他”情况等问题。 |
![]() |
7
0
如果你看一下我书中的ExpressionConverter WPF Converters library ,它具有C#表达式的基本词法分析和语法分析。从内存中看,不涉及正则表达式。 |
![]() |
A B · C#Excel自动调整列避免长文本时出错 4 月前 |
![]() |
Megrez7 · C#ToArray转换合并为一行,导致数组元素更改 4 月前 |
![]() |
Aycon · 在工厂方法中释放部分创建的对象的正确方法是什么? 4 月前 |
|
Sei · Avalonia/WPF将路由器传递到控制模板 5 月前 |