c++ - 如果字符在引号之间则不匹配(AKA 具有编程字符串模式)

标签 c++ regex boost basic compiler-construction

我被指派为 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/

相关文章:

c++ - mt19937 和正态分布

c++ - 这是 "Tag Dispatching"吗?

c++ - 删除boost归档对象还会删除与其关联的流吗?

c++ - boost spirit skipper 问题

boost - 如何在Elasticsearch中使用所有搜索词而不是所有搜索词的OR来 boost 记录?

c++ - 使用 CUDA 在主机设备中将 char 转换为 int

C++ 将强类型基类与 CRTP 和返回值类型推导混合

regex - 删除 2 个匹配模式之间的 n 行,保留第一个匹配项并删除第二个匹配项

java - 正则表达式将文本文档分割成句子

R 中具有多个捕获组的正则表达式组捕获