|
|
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#表达式的基本词法分析和语法分析。从内存中看,不涉及正则表达式。 |
|
|
DotFX · RegEx捕获关键字前但括号后的所有内容 1 年前 |
|
|
Andrus · 如何在sql中查找第二个匹配项 1 年前 |
|
|
iato · 确保正则表达式不从命名材料中的数字中提取 1 年前 |
|
|
vr8ce · 非成对标记中特定字符的正则表达式 1 年前 |
|
|
MARTIN · 交换第一个和最后一个单词,反转所有中间的字符 1 年前 |
|
|
Carsten · 使用最近的搜索模式更改文本块 1 年前 |