ocaml 解析器中的优先级重要吗?
Does precedence matter in ocaml parser?
例如,如果我正在编写一个 parser.mly 文件,并且我为表达式编写了这个文件
expr:
expr PLUS expr { Binop(, Add, ) }
| expr DIVIDE expr { Binop(, Divide, ) }
这会和
一样吗
expr:
expr DIVIDE expr { Binop(, Divide, ) }
| expr PLUS expr { Binop(, Add, ) }
就像我想我问的是垂直列出的顺序在确定解析优先级时是否重要?
ocamlyacc 和 menhir 都要求您使用 %left
、%right
和 %nonassoc
声明明确声明优先级。制作顺序不相关。
例如,如果我正在编写一个 parser.mly 文件,并且我为表达式编写了这个文件
expr:
expr PLUS expr { Binop(, Add, ) }
| expr DIVIDE expr { Binop(, Divide, ) }
这会和
一样吗expr:
expr DIVIDE expr { Binop(, Divide, ) }
| expr PLUS expr { Binop(, Add, ) }
就像我想我问的是垂直列出的顺序在确定解析优先级时是否重要?
ocamlyacc 和 menhir 都要求您使用 %left
、%right
和 %nonassoc
声明明确声明优先级。制作顺序不相关。