これは、パーサー モジュールの関数です。1 行のコードを理解するのが難しい
let rec e1 tokens =
match tokens with
Tokenizer.IfTok :: tokens1 ->
let (testAST, tokens2) = e1 tokens1
in
(match tokens2 with
Tokenizer.ThenTok :: tokens3 ->
let (thenAST, tokens4) = e1 tokens3
in
(match tokens4 with
Tokenizer.ElseTok :: tokens5 ->
let (elseAST, tokens6) = e1 tokens5
in
(If(testAST, thenAST, elseAST), tokens6)
| _ -> raise (Syntax ("e1: missing else.")))
| _ -> raise (Syntax ("e1: missing then.")))
| _ -> e2 tokens
and e2 tokens = ........
この線の仕組みがよくわからない
let (testAST, tokens2) = e1 tokens1 in
タプルであるローカル変数を宣言していることは知っていますが、値 (testAST、tokens2) はどこから来るのでしょうか? tokens や tokens1 とは関係がないようです。また、この行はタプルを宣言するだけですか、それとも関数を呼び出しますか? ありがとう!