【发布时间】:2015-02-21 14:28:37
【问题描述】:
我在这里需要一些帮助;我正在尝试制作一些Regex 表达式,以便在我的代码中捕捉单词int、任何数学运算、任何数字和= 符号,而忽略所有其他内容。将被忽略的单词将设置为 false,而其他单词将设置为 true,如下面的代码所示。
这将用于标记上述关键字,以实现可以检测整数溢出的 Lexer。我需要专门使用Regex 完成此操作。
我已经成功捕捉到单词int、数学运算和数字,但我的Regex 似乎无法识别任何随机单词;例如变量名(number1、number2 等)和语言中的任何其他单词,例如 if 语句、圆括号、花括号等......
lexer.AddDefinition(new TokenDefinition(
"(operator)",
new Regex(@"\*|\/|\+|\-"),
false));
lexer.AddDefinition(new TokenDefinition(
"(literal)",
new Regex(@"\d+"),
false));
lexer.AddDefinition(new TokenDefinition(
"(Random Word)",
new Regex(@"(?=.*[A-Z])(?=.*[a-z])"),
false));
lexer.AddDefinition(new TokenDefinition(
"(integer)",
new Regex(@"\bint\b"),
false));
lexer.AddDefinition(new TokenDefinition(
"(white-space)",
new Regex(@"\s+"),
true));
// This is not working. Random words such as variable names are not being captured by this.
lexer.AddDefinition(new TokenDefinition(
"(random-word)",
new Regex(@"\b(?=.*[A-Z])(?=.*[a-z])\b"),
true));
// What about the brackets? How can I implement a Regex to capture brackets?
这似乎很简单,但我无法完成。欢迎分享你的看法,欢迎提出意见。
【问题讨论】:
-
为澄清而编辑。
-
您是否考虑过使用 LL(1) 解析器生成器,例如 coco/r 或类似的? thefreecountry.com/programming/compilerconstruction.shtml
-
谢谢,我去看看:)