Swerve详细设计解析
1. IETF_Line和IETF_Part模块
1.1 功能概述
IETF_Line模块的主要功能是依据HTTP请求的语法规则,将字符串拆分为标记(tokens)和特殊字符。拆分后的结果是一个由IETF_Part模块中定义的Part类型元素组成的列表。
1.2 Part类型定义
datatype Part = Token of string (* including quoted strings *) | TSpec of char | TWh of string (* the white space *) | TBad of char (* invalid character *) | TEOF1.3 词法分析器(Lexer)
为了识别标记和特殊字符,使用了ML-Lex工具生成的词法分析器。ML-Lex类似于C语言的标准Unix lex工具,用户需要提供各种部分的正则表达式规范,它会为这些表达式构建词法分析器。以下是ietf.lex文件中的规范主体:
%structure IETFLex %full ctl=[\000-\031\127]; ws=[\ \t]; tokn=[!#$%&’*+.0-9A-Z^_‘a-z|~\h-]; str=[^\000-\031\127"]; %% {ws}+ => (TWh yytext); {tokn}+ => (Token yytext); \"{str}