从零开始制作编程语言/逐行输入系统
外观
要制作一个编译器,显然你需要从文件中获取输入。因此,你需要熟悉至少一种你熟练掌握的语言中的文件 I/O。现在如何获取语句呢?编程语言中的每一行都以一个非常特定的字符结束,该字符不是换行符。通常是分号 (;) 或左大括号 ({)。所以要获取完整的一行,我们只需要输入到终止字符为止。请注意,这种方法意味着你不能在字符串或字符中包含终止字符,而必须用它们的 ASCII 码来表示它们。
1.Input Character 2.Check if Character is terminating character 2.1.If true , add character and terminate process 2.2.Else add character and continue 2.3.If line contains EOF(end of file) character, terminate program after processing line. [Usually done by the means of flags] 3.Repeat from step 1
此算法将从文件中获取输入,然后将其存储到分配给它的字符数组中。
现在,一旦你拥有了完整的逻辑行,你打算用它做什么?显然你要处理它。但如何处理呢?有两种方法。
1. 词法分析和语法分析行
2. 获取关键字并随后采取相应措施
在方法 1 中,我们获取行,将其通过所谓的“词法分析器”,将其分解成标记,再通过“语法分析器”对其进行分析。根据此分析结果,它做出明智的决策,并将行发送到相应的处理过程。但是,这种方法需要非常复杂的系统。
本书旨在跳过语法分析和词法分析的过程,直接进入处理阶段。因此,本书使用伪语法分析器和伪词法分析器方法(方法 2),该方法对每种类型的语句进行不同的词法分析和语法分析,这使得编译器更简单,并允许更多的语法自由度。
此方法的算法相当简单
1.Take character from character array storing logical line till we encounter a 'delimiter' like ',",[space] and { 2.Compare the keyword thus derived with the set of all defined keywords. 2.1.If one matches, send the line to the matching function to process it. 2.2.If none match, produce an error message
此过程完成后,检查行输入系统设置的标志,如果标志已设置,则终止程序。