我想解析一组表达式:R[3]C, R[2]C, R[3]C-R[2]C... 有一个我无法解决的冲突...
这是一部分lexer.mll:
rule token = parse
| 'R' { R }
| 'C' { C }
| "RC" { RC }
| ['0'-'9']+ as lxm { INTEGER (int_of_string lxm) }
| '+' { PLUS }
| '-' { MINUS }
| '[' { LBRACKET }
| ']' { RBRACKET }
| eof { EOF }
...
的一部分parser.mly:
main:
e_expression EOF { $1 };
e_expression:
| ec = e_cell { EE_rc (Rc.Cell ec) }
| e_expression MINUS e_expression { EE_string_EEL ("MINUS", [$1; $3]) }
e_cell:
| R LBRACKET r = index RBRACKET C c = index { (Rc.I_relative r, Rc.I_absolute c) }
| R LBRACKET r = index RBRACKET C { (Rc.I_relative r, Rc.I_relative 0) }
index:
| INTEGER { $1 }
| MINUS INTEGER { Printf.printf "%n\n" 8; 0 - $2 }
奇怪的是,这段代码不起作用R[3]C-R[2]C,这里是parser.conflicts,我无法真正理解。
如果我注释行| R LBRACKET r = index RBRACKET C c = index ...中的行e_cell,代码可以解析R[3]C-R[2]C,where 3and 2are index,`R[3]Cand R[2]Care e_cell,and R[3]C-R[2]Cis e_expression。
有人可以帮忙吗?