我被指派为 Basic programming language 编写编译器.在基本情况下,代码用换行符或 :
标记分隔。例如,以下代码是有效的。
型号#1
10 PRINT "Hello World 1" : PRINT "Hello World 2"
模型#2
10 PRINT "Hello World 1"
20 PRINT "Hello World 2"
你可以测试那些 here .
在我的编译器中解析代码之前,我需要做的第一件事是拆分代码。
我已经将代码拆分成行,但我仍然无法找到一个正则表达式来拆分以下代码示例:
以下代码示例应拆分为 2 个 PRINT
代码。
10 PRINT "Hello World 1" : PRINT "Hello World 2"
但不要匹配这个:
以下代码示例是一个独立的命令。
10 PRINT "Hello World 1" ": PRINT Hello World 2"
问题
要匹配上述代码示例中的第一个 :
在一对 "
之外并且不匹配第二个的任何正则表达式模式?
有人可以帮我吗?
任何事情都会有所帮助。 :)
最佳答案
我认为对您来说最好的选择是使用诸如循环之类的设备来标记您的源代码,而不是尝试使用正则表达式来标记它。
伪代码
string lexeme;
token t;
for char in string
if char fits current token
lexeme = lexeme + char;
else
t.lexeme = lexeme;
t.type = type;
lexeme = null;
end if
// other treatments here
end for
您可以在 this source code 中看到此设备的真实实现,更具体地说,在第 86 行。
关于c++ - 如果字符在引号之间则不匹配(AKA 具有编程字符串模式),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22737086/