对特定语法的需求来自于解析器技术的选择;你的语法必须遵守该解析器技术的局限性(它们都有一些) . 所以你的第一个问题应该是,"What parser generator am I going to use?"(包括如果你坚持,"none [recursive descent]"然后仔细考虑你为什么使用那个解析器生成器(通常是"its the first thing I found, or Mikey likes it",两者都是腐烂的原因) . 特别是考虑了一个特定的解析器生成器,您可以考虑语言规范本身来决定解析器生成器's shortcomings are likely to be an issue. This choice isn' t是否对huge set of possible answers有很大帮助,但这是您作为工程师的问题 .
1 回答
大多数语言规范都附带语法形式,为您提供设计特定语法的基础 .
对特定语法的需求来自于解析器技术的选择;你的语法必须遵守该解析器技术的局限性(它们都有一些) . 所以你的第一个问题应该是,"What parser generator am I going to use?"(包括如果你坚持,"none [recursive descent]"然后仔细考虑你为什么使用那个解析器生成器(通常是"its the first thing I found, or Mikey likes it",两者都是腐烂的原因) . 特别是考虑了一个特定的解析器生成器,您可以考虑语言规范本身来决定解析器生成器's shortcomings are likely to be an issue. This choice isn' t是否对huge set of possible answers有很大帮助,但这是您作为工程师的问题 .
一旦选择了解析器生成器,然后从语言规范中获取语法形式,并尝试将其弯曲到解析器生成器的限制 . 这是您的大部分“创作”工作将来自的地方 . 在面对大型复杂语言时,在较小语言上多次这样做的经验非常有用 .
如果你有一个没有明显参考语法的语言,你会有更难的时间 . 你必须猜测各种语言结构的语法规则,以及这些规则如何组合成更大的程序结构 . 如果这是你面临的问题,你最好有 Build 一些其他工作语法的经验,否则你很可能会失去希望 . (COBOL在这里非常有趣 . )
一旦你获得了解析器生成器显然可以接受的语法,那么你需要通过解析器运行尽可能多的代码 . 这有助于发现语法错误,以及标准文档的不一致或错误描述 . 您还会发现由其他编译器处理的“您的语言”源代码可能包含许多其他编译器添加的意外,因为它们可以 .
祝好运 .