我想解析一组表达式: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 3
and 2
are index
,`R[3]C
and R[2]C
are e_cell
,and R[3]C-R[2]C
is e_expression
。
有人可以帮忙吗?