Swerve详细设计解析
配置词法分析器
配置词法分析器将配置文件拆分为词法单元,包括单词、字符串、符号和整数。单词和字符串的主要区别在于字符串可以包含任何特殊字符,因此必须用引号引起来;而单词允许包含足够的特殊字符以构成常见的文件路径。符号包括标点符号和一些保留字,文件的布局为自由格式,词法单元之间可以有任意数量的空白。
词法分析器使用ML - Lex生成。在config.lex文件中间部分有一些与解析器交互所需的声明:
(* These definitions are required by the parser. The lexer types are supplied by the grammar. *) type pos = Common.SrcPos type arg = string (* type from %arg below *) type svalue = Tokens.svalue type (’a,’b) token = (’a,’b) Tokens.token type lexresult= (svalue,pos) token fun eof file = Tokens.EOF(get_pos file 0, get_pos file 0) %% %header (functor ConfigLexFun(structure Tokens: Config_TOKENS));ML - Yacc将生成一个结构,定义从词法分析器传递到解析器的所有词法单元,这些是语法的终结符。以下是Config_TOKENS </