add_infix : string * int * HOLgrammars.associativity -> unit
<str1> s <str2>
s <t1> <t2>
It is also possible that the choice of string s will result in an ambiguous grammar. This will be marked with a warning. The parser may behave in strange ways if it encounters ambiguous phrases, but will work normally otherwise.
- add_infix ("+", 500, HOLgrammars.LEFT); > val it = () : unit - val t = Term`x + y`; <<HOL message: inventing new type variable names: 'a, 'b, 'c.>> > val t = `x + y` : term
- dest_comb t; > val it = (`$+ x`, `y`) : term * term
- Term`\$+. x + y`; <<HOL message: inventing new type variable names: 'a, 'b, 'c.>> > val it = `\$+. x + y` : term - dest_abs it; > val it = (`$+`,`x + y`) : term * term
- Term`x + y + z`; <<HOL message: inventing new type variable names: 'a, 'b.>> > val it = `x + y + z` : term - dest_comb it; > val it = (`$+ (x + y)`, `z`) : term * term
- Term`p /\ q + r`; <<HOL message: inventing new type variable names: 'a, 'b.>> > val it = `p /\ q + r` : term - dest_comb it; > val it = (`$/\ p`, `q + r`) : term * term
Lib.try add_infix("-", 500, HOLgrammars.RIGHT); Exception raised at Parse.add_infix: Grammar Error: Attempt to have differently associated infixes (RIGHT and LEFT) at same level
- Lib.try add_infix("-", 900, HOLgrammars.RIGHT); Exception raised at Parse.add_infix: Grammar Error: Attempt to have different forms at same level
- add_infix("+", 400, HOLgrammars.RIGHT); > val it = () : unit - Term`p + q`; <<HOL warning: Parse.Term: Grammar ambiguous on token pair + and +, and probably others too>> <<HOL message: inventing new type variable names: 'a, 'b, 'c>> > val it = ``p + q`` : term