By default, the parser doesn't take any argument other than the input. When building the AST, it might be useful to pass parameters to the parser, which might be needed to the construction of the tree.
MST --- 默认情况下,解析器不接受 input 以外的任何参数。在构建 AST 时,将参数传递给解析器可能很有用,这可能是构建树所必需的。
GPT --- 默认情况下,解析器除了输入之外不接受任何参数。在构建抽象语法树(AST)时,可能需要向解析器传递一些参数,这些参数可能在构建树时是必需的。
Going back to the calculator4 example it is possible to pass an argument to the parser :
MST --- 回到 calculator4 示例,可以将参数传递给解析器:
GPT --- 回到 calculator4 示例,可以向解析器传递参数:
grammar(scale: i32);
Num: i32 = {
r"[0-9]+" => i32::from_str(<>).unwrap()*scale,
};
Here the parser will accept a scale parameter that will scale every number encountered.
MST --- 在这里,解析器将接受一个 scale 参数,该参数将缩放遇到的每个数字。
GPT --- 在这里,解析器将接受一个
scale
参数,用于缩放每个遇到的数字。
We can then call the parser with the state parameter :
#[test]
fn calculator8() {
let scale = 2;
let expr = calculator8::ExprParser::new()
.parse(scale,"11 * 22 + 33")
.unwrap();
assert_eq!(&format!("{:?}", expr), "((22 * 44) + 66)");
}
For a more practical example with a custom tree structure, check out this parser using this structure to build the AST.
MST --- 有关自定义树结构的更实际示例,请查看使用此结构构建 AST 的解析器。
GPT --- 对于一个更实际的例子,可以查看这个解析器,它使用自定义树结构来构建 AST。
Note: The state parameter must implement the Copy trait. For types that don't implement Copy, you should pass them as a reference instead.
MST --- 注意: state 参数必须实现 Copy trait。对于未实现 Copy 的类型,应改为将它们作为引用传递。
标签:解析器,scale,AST,5.9,---,state,参数,Passing From: https://www.cnblogs.com/Tifahfyf/p/18653312GPT --- 注意:
state
参数必须实现Copy
特征。对于那些没有实现Copy
的类型,应该将它们作为引用传递。