Skip to content

Latest commit

 

History

History
25 lines (24 loc) · 865 Bytes

README.md

File metadata and controls

25 lines (24 loc) · 865 Bytes

用 Rust 实现整数的带括号四则运算: 四则运算的 EBNF 定义如下:

Expression ::= (Expression [+-])? PriorityExpression
PriorityExpression ::= (PriorityExpression [*/])? Factor
Factor ::= Number | "(" Expression ")"

消除左递归,转化为 LL(1) 文法:

Expression ::= PriorityExpression ExpressionTail
ExpressionTail ::= ([+-] PriorityExpression ExpressionTail)?
PriorityExpression ::= PriorityExpression PriorityExpressionTail
PriorityExpressionTail ::= ([*/] Factor PriorityExpressionTail)?
Factor ::= Number | "(" Expression ")"

Railroad Diagram 如下:

Expression:

PriorityExpression:

Factor:

相关 Railroad Diagram 在这个网站生成 https://www.bottlecaps.de/rr/ui