后浪笔记一零二四

Simplified Syntax-directed Translation Scheme

declaration:
    declaration_specifiers declarator  {printf("%s", declaration_specifiers)}

declaration_specifiers:
    storage_class_specifier declaration_specifiers?
  | type_specifier declaration_specifiers?
  | type_qualifier declaration_specifiers?

storage_class_specifier:
    "auto"
  | "register"
  | "static"
  | "extern"

type_specifier:
    "void"
  | "char"
  | "short"
  | "int"
  | "long"
  | "float"
  | "double"
  | "signed"
  | "unsigned"

type_qualifier:
    "const"
  | "volatile"

declarator:
    direct_declarator
  | pointers direct_declarator {printf("%s"), pointers}

direct_declarator:
    identifier
  | (declarator)
  | direct_declarator "[" digits? "]"
  | direct_declarator "(" params? ")"

pointers:
    "*" pointers?

params:
    [^)]*

提取左公因子

direct_declarator:
    direct_declarator_simple
  | direct_declarator director_declarator_postfix

direct_declarator_simple:
    identifier
  | (declarator)

director_declarator_postfix:
    "[" digits? "]"
  | "(" params? ")"

消除左递归

direct_declarator:
    direct_declarator_simple direct_declarator_arr_fn

direct_declarator_simple:
    identifier       {printf("%s: ", identifier)}
  | (declarator)

direct_declarator_arr_fn:
    director_declarator_postfix direct_declarator_arr_fn
  | epsilon

director_declarator_postfix:
    "[" digits? "]"  {printf("array[%s] of ", digits)}
  | "(" params? ")"  {printf("function(%s) returning ", params)}

本文发表于 0001-01-01,最后修改于 0001-01-01。

本站永久域名「 jiavvc.top 」,也可搜索「 后浪笔记一零二四 」找到我。


上一篇 « 下一篇 »

赞赏支持

请我吃鸡腿 =^_^=

i ysf

云闪付

i wechat

微信

推荐阅读

Big Image