小编Pri*_*les的帖子

自上而下的递归解析

我需要包含函数parseS,parseL和parseE.这些函数将把已经标记化的"程序"作为输入,表示为令牌列表.

type token = TK_IF | TK_THEN | TK_ELSE | TK_BEGIN | TK_END | TK_PRINT | TK_SEMIC | TK_ID of string;;


let program = [ TK_IF; TK_ID("a"); TK_THEN; TK_BEGIN; TK_PRINT; TK_ID("b"); TK_SEMIC; TK_PRINT; TK_ID("c");  TK_END; TK_ELSE; TK_PRINT; TK_ID("d")];;
Run Code Online (Sandbox Code Playgroud)

并输出这样的东西:

parseS program;;
IF2(ID "a",STATLIST(PRINT (ID "b"),LISTCONT(PRINT (ID "c"),END)),PRINT (ID "d"))
Run Code Online (Sandbox Code Playgroud)

parseL应该看起来像这样

let rec parseL = function
 | TK_END::xs -> (xs,END)
 | TK_SEMIC::xs -> let (rest,stat) = parseS xs
                   let (rest,lst) = parseL rest
                   (rest, LISTCONT(stat,lst))
 | l -> failwith ("error parsing …
Run Code Online (Sandbox Code Playgroud)

f#

5
推荐指数
0
解决办法
131
查看次数

标签 统计

f# ×1