对于一个学校项目,我需要解析一个包含简化的“假”编程语言的文本/源文件来构建一个AST。我看过boost::spirit
,但是因为这是一个小组项目,而且大多数人似乎不愿意学习额外的库,而且讲师/助教建议倾向于在 C++ 上创建一个简单的库。我想过走那条路。有没有一些例子或关于如何开始的想法?我有一些尝试,但还没有真正成功......
逐行解析
- 用一堆正则表达式测试每一行(1个用于过程/函数声明),一个用于赋值,一个用于while等......
- 但我需要假设一行中没有多个语句:例如。
a=b;x=1;
- 但我需要假设一行中没有多个语句:例如。
- 当我到达容器语句、程序、while 等时,我将增加
indent
. 所以所有嵌套语句都将在此之下 - 当我达到 a
}
我会减少缩进
有更好的想法或建议吗?我需要解析的示例代码(这里非常简化......)
procedure Hello {
a = 1;
while a {
b = a + 1 + z;
}
}
另一个想法是将整个文件读入一个字符串,然后自上而下。匹配所有过程,然后捕获其中的所有内容,{ ... }
然后开始匹配语句(以 结尾;
)或容器while { ... }
。这类似于 PEG 做事的方式?但我需要阅读整个文件