好的,我正在用C#编写一个语言编译器,将我的语言转换为MSIL,然后调用MSIL编译器。但这不是重点。我创建了一些代码来表明你希望我将要使用:
module myApplication
[EntryPoint]
function void start
write("Hello World!\n")
wait(5) // wait 5 seconds
ret()
endfunction
endModule
好的,我正在尝试扫描该代码并找到“[EntryPoint]”的位置,然后在其后找到所有“函数void start”。所以我可以找到函数类型(“void”)和名称(“start”)。 [EntryPoint]标记将始终位于将被定义为应用程序入口点的函数之上。我将不得不削减空白和东西。这也是使用'\ n'扫描,所以函数必须在标签下。
我还有另一个问题,如何将函数内的代码与“function void start”和“endfunction”分开?
答案 0 :(得分:3)
编写编译器比编写简单的字符串操作更多很多 - 例如,如果您的源代码如下所示:
module myApplication
string myString = "[EntryPoint]
function void start
write("Hello World!\n")
wait(5) // wait 5 seconds
ret()
endfunction"
endModule
即。你的源代码定义了一个包含程序源代码的字符串 - 你不能只查看看起来像入口点的东西,你需要实际解析你的源代码。
有关入门的良好资源,请参阅Learning to write a compiler。