我正在学习编译器,我对如何创建语言的无上下文语法感到困扰。有没有一种方法可以为大多数语言创建无上下文语法?我是这个领域的新手所以问题是基本的,我希望你能帮助我。
答案 0 :(得分:1)
大多数语言规范都带有语法形式,为您提供设计特定语法的基础。
对特定语法的需求来自于解析器技术的选择;你的语法必须遵守该解析器技术的局限性(它们都有一些)。所以你的第一个问题应该是,"我将使用什么解析器生成器?" (包括如果你坚持,"没有[递归下降]"然后仔细考虑为什么你正在使用那个解析器生成器(通常是,"它是第一个我找到的东西,或Mikey喜欢它",这两者都是腐烂的原因。)特别是,考虑到特定的解析器生成器,你可以考虑语言规范本身来决定解析器生成器的缺点是否可能成为一个问题。huge set of possible answers对此选择没有多大帮助,但这是您作为工程师的问题。
一旦您选择了解析器生成器,那么您将从语言规范中获取语法形式,并尝试将其弯曲到解析器生成器的限制。这是你的大部分创作和#34;工作将来自。在面对大型复杂语言时,在较小语言上多次这样做的经验非常有用。
如果你有一个没有明显参考语法的语言,你会有更难的时间。你必须猜测各种语言结构的语法规则,以及这些规则如何组合成更大的程序结构。如果这是你面临的问题,你最好有建立一些其他工作语法的经验,否则你很可能会失去希望。 (COBOL在这里非常有趣。)
一旦你获得了解析器生成器显然可以接受的语法,那么你需要通过解析器运行尽可能多的代码。这有助于发现语法错误,以及标准文档的不一致或错误说明。您还可以找到"您的语言"的源代码。由其他编译器处理的其他编译器可能会包含很多惊喜,只是因为它们可以。
祝你好运。