3

我正在学习编译器,我对如何创建一种语言的上下文无关语法感到困扰。有没有一种方法可以为大多数语言创建上下文无关语法?我是这个领域的新手,所以这个问题很基础,希望你能帮助我。

4

1 回答 1

1

大多数语言规范都带有语法形式,为您提供设计特定语法的基础。

对特定语法的需求来自对解析器技术的选择;您的语法必须尊重该解析器技术的限制(它们都有一些限制)。所以你的第一个问题应该是,“我要使用什么解析器生成器?” (包括如果你坚持,“没有[递归下降]”,然后仔细考虑为什么你使用那个解析器生成器(通常是,“它是我发现的第一件事,或者 Mikey 喜欢它”,这两个都是糟糕的原因). 特别是,在考虑了特定的解析器生成器之后,您可以考虑语言规范本身来确定解析器生成器的缺点是否可能是一个问题。大量可能的答案对这个选择没有多大帮助,但是'

一旦您选择了解析器生成器,您就可以从语言规范中获取语法形式,并尝试使其适应解析器生成器的限制。这是您大部分“创作”工作的来源。在处理大型复杂语言时,在较小的语言上多次执行此操作的经验非常有用。

如果您的语言没有明显的参考语法,那么您的日子会更加艰难。您将不得不猜测各种语言结构的语法规则,以及这些规则如何组合成更大的程序结构。如果这是您面临的问题,那么您最好有构建许多其他工作语法的经验,否则您可能会绝望地迷失方向。(COBOL 在这里真的很有趣。)

一旦你得到一个语法显然可以被你的解析器生成器接受,那么你需要通过你的解析器尽可能多地运行该语言的代码。这是为了帮助发现您的语法错误,以及标准文档的不一致或误解。您还会发现,其他编译器处理的“您的语言”的源代码可能包含很多惊喜,这些都是其他编译器添加的,只是因为它们可以。

祝你好运。

于 2014-11-18T18:25:55.733 回答