1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76
|
FIRST_CHARS := words `a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z 1 2 3 4 5 6 7 8 9 0`;;
CHARS := words `a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z 1 2 3 4 5 6 7 8 9 0 _`;;
USEFUL := [(`"`,`"`)];;
IGNORE := [(`#`,`\L`)];;
letref integer
(lst:string list) (whitespace:string)(prev:string)
(result_list:ella list list)
(FIRST_CHARS:string list) (CHARS:string list) (expected:string) =
(fail:ella list,fail:ella list list,fail:string,fail:string list);;
letref char
(lst:string list) (whitespace:string)(prev:string)
(result_list:ella list list)
(FIRST_CHARS:string list) (CHARS:string list) (expected:string) =
(fail:ella list,fail:ella list list,fail:string,fail:string list);;
letref name
(lst:string list) (whitespace:string)(prev:string)
(result_list:ella list list)
(FIRST_CHARS:string list) (CHARS:string list) (expected:string) =
(fail:ella list,fail:ella list list,fail:string,fail:string list);;
letref fnname
(lst:string list) (whitespace:string)(prev:string)
(result_list:ella list list)
(FIRST_CHARS:string list) (CHARS:string list) (expected:string) =
(fail:ella list,fail:ella list list,fail:string,fail:string list);;
letref typename
(lst:string list) (whitespace:string)(prev:string)
(result_list:ella list list)
(FIRST_CHARS:string list) (CHARS:string list) (expected:string) =
(fail:ella list,fail:ella list list,fail:string,fail:string list);;
letref macname
(lst:string list) (whitespace:string)(prev:string)
(result_list:ella list list)
(FIRST_CHARS:string list) (CHARS:string list) (expected:string) =
(fail:ella list,fail:ella list list,fail:string,fail:string list);;
letref biopname
(lst:string list) (whitespace:string)(prev:string)
(result_list:ella list list)
(FIRST_CHARS:string list) (CHARS:string list) (expected:string) =
(fail:ella list,fail:ella list list,fail:string,fail:string list);;
letref string
(lst:string list) (whitespace:string)(prev:string)
(result_list:ella list list)
(FIRST_CHARS:string list) (CHARS:string list) (expected:string) =
(fail:ella list,fail:ella list list,fail:string,fail:string list);;
letrec TOKEN_1 TOKENS CHARS =
if null TOKENS then ()
else if mem (hd TOKENS) CHARS then
TOKEN_1 (tl TOKENS) CHARS
else
fail;;
let TOKEN TOKENS FIRST_CHARS CHARS next expected =
if mem (hd TOKENS) FIRST_CHARS then
(TOKEN_1 (tl TOKENS) CHARS;
let wrd = implode TOKENS in
if expected = `nil` then
wrd
else if expected = next then
wrd
else fail)
else
fail
? fail;;
|