如何匹配子字符串和字符串本身?
How to match with both substring and string itself?
我正在尝试用 lex 标记一堆代码,并用不同的正则表达式匹配不同类型的关键字。当遵循正则表达式匹配时,它会标记与 "VARIABLE";
匹配的任何内容
[_a-zA-Z][_a-zA-Z0-9]*
下面与打印语句相匹配;
\s*print\((.*?)\)\s*
我需要的是当下面的语句经过词法分析时;
myVar_12
print(myVar_12)
代币应该是这样的;
VARIABLE
PRINT VARIABLE
但是我得到的是;
VARIABLE
PRINT
我从昨天开始学习正则表达式,不知道该怎么办。所以请原谅我毫无意义的正则表达式。
您已在评论中澄清,您希望 print
成为关键字,无论其后是否跟有参数列表。因此,参数列表不应是 print
的正则表达式¹ 的一部分。匹配 print
的正则表达式应该只是 print
。
print return PRINT;
[_a-zA-Z][_a-zA-Z0-9]* return VARIABLE;
请注意,顺序很重要,因为输入 "print" 可以被两个正则表达式匹配,如果多个正则表达式产生相同长度的匹配,lex
使用第一个文件。因此,应始终在标识符规则之前定义关键字。
您还需要将括号识别为它们自己的标记并忽略白色 space(大概)。
¹ 事实上,无论哪种方式,它都应该是正则表达式的一部分。但是,如果您希望 print
成为上下文关键字,则需要不同的解决方案。
我正在尝试用 lex 标记一堆代码,并用不同的正则表达式匹配不同类型的关键字。当遵循正则表达式匹配时,它会标记与 "VARIABLE";
匹配的任何内容[_a-zA-Z][_a-zA-Z0-9]*
下面与打印语句相匹配;
\s*print\((.*?)\)\s*
我需要的是当下面的语句经过词法分析时;
myVar_12
print(myVar_12)
代币应该是这样的;
VARIABLE
PRINT VARIABLE
但是我得到的是;
VARIABLE
PRINT
我从昨天开始学习正则表达式,不知道该怎么办。所以请原谅我毫无意义的正则表达式。
您已在评论中澄清,您希望 print
成为关键字,无论其后是否跟有参数列表。因此,参数列表不应是 print
的正则表达式¹ 的一部分。匹配 print
的正则表达式应该只是 print
。
print return PRINT;
[_a-zA-Z][_a-zA-Z0-9]* return VARIABLE;
请注意,顺序很重要,因为输入 "print" 可以被两个正则表达式匹配,如果多个正则表达式产生相同长度的匹配,lex
使用第一个文件。因此,应始终在标识符规则之前定义关键字。
您还需要将括号识别为它们自己的标记并忽略白色 space(大概)。
¹ 事实上,无论哪种方式,它都应该是正则表达式的一部分。但是,如果您希望 print
成为上下文关键字,则需要不同的解决方案。