如何创建一个无上下文文法?

3

我正在学习编译器,但是我不知道如何为一种语言创建上下文无关文法。是否有一种方法可以用来为大多数语言创建上下文无关文法?由于我是新手,所以这个问题很基础,希望你能帮助我。


1
这个问题太宽泛了。我看了一下,似乎很简单- http://www.cs.rochester.edu/~nelson/courses/csc_173/grammars/cfg.html - MatthewMartin
1个回答

1
大多数语言规范都带有一种语法形式,为您设计特定语法提供了基础。需要特定语法的原因来自于解析器技术的选择;您的语法将不得不遵守该解析器技术的限制(它们都有些限制)。所以,你的第一个问题应该是:“我将使用什么解析器生成器?”(包括如果您坚持使用“none [递归下降]”,则要仔细考虑为什么使用该解析器生成器(通常是“这是我找到的第一件事,或者Mikey喜欢它”,这两个原因都是不好的原因)。特别是,在考虑了特定的解析器生成器之后,您可以考虑语言规范本身,以确定解析器生成器的缺点是否可能成为问题。这个选择并没有得到巨大的可能答案集的帮助,但这是作为工程师的您的问题。一旦您选择了解析器生成器,那么您就可以从语言规范中获取语法形式,并尝试将其弯曲到解析器生成器的限制上。这是您大部分“创建”工作的来源。在小语言上做过几次这样的事情对面对大而复杂的语言很有帮助。
如果你的语言没有明显的参考文法,那么你会遇到更大的困难。你必须猜测不同语言结构的语法规则以及如何将这些规则组合成更大的程序结构。如果这是你面临的问题,你最好有建立其他可用文法的经验,否则你可能会彻底迷失方向。(COBOL在这里真的很有趣。)
一旦你获得了一个对解析器生成器来说显然可以接受的语法,那么你需要尽可能地运行更多的该语言代码通过你的解析器。这有助于发现你的文法错误、标准文件的不一致或误解。你还会发现,由其他编译器处理的“你的语言”的源代码可能会包含许多惊喜,因为它们可以。
祝你好运。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接