下面是微信接龙中订单的正规文法:
order_list ::= order | order order_list
order ::= num '-' client '-' order_item
order_item ::= item_name ' ' num ' ' unit | order_item ',' item_name ' ' num ' ' unit
item_name ::= 品名
num ::= 数字
unit ::= 单位
client ::= 客户
下面是用于语法分析的上下文无关文法:
S -> order_list
order_list -> order | order order_list
order -> num '-' client '-' order_item
order_item -> item_name ' ' num ' ' unit | order_item ',' item_name ' ' num ' ' unit
item_name -> 品名
num -> 数字
unit -> 单位
client -> 客户
下面是用于语义计算的翻译模式:
当遇到 order_list 规则时,初始化统计数量的哈希表。
当遇到 order 规则时,遍历 order_item 并统计每种品名的数量。
当遇到 order_item 规则时,将品名的数量加到哈希表中。
例如,对于以下订单:
1.3-2-1101香蕉一份
2.1-2-1501苹果2份
3.3-1-2704香蕉一份,苹果一份
4.4-2-1904-刘 苹果两份
翻译模式会生成以下输出:
香蕉:2 份
苹果:5 份
望采纳。