Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- let boolean_expression_of_string str =
- let lexify str =
- let keywords = ["("; ")"; "¬"; "∧"; "∨"] in
- make_lexer keywords (Stream.of_string str)
- and parse lexer =
- let rec binary_expression =
- let rec loop left_expr =
- parser
- | [< 'Kwd "∧"; right_expr = unary_expression; s >] -> loop (And [left_expr; right_expr]) s (* Syntax error here characters 10-11 *)
- | [< 'Kwd "∨"; right_expr = unary_expression; s >] -> loop (Or [left_expr; right_expr]) s
- | [< >] -> left_expr
- in
- parser [< left_expr = unary_expression; s >] -> loop left_expr s
- and unary_expression =
- parser
- | [< 'Kwd "¬"; expr = unary_expression >] -> Not expr
- | [< 'Kwd "("; expr = binary_expression; 'Kwd ")" >] -> expr
- | [< 'Int n >] -> Var n
- in
- binary_expression lexer
- in
- parse (lexify str)
- ;;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement