首页 > 代码库 > C语言 文法规则之消除左递归

C语言 文法规则之消除左递归

<program>→<external declarations>(<program>|~)

<external declarations>→<function definition>|<declaration>

<function definition>→<type declaration><declarator><consistent statement>

<type declaration>→<void>|<char>|<int>|<float>

<declarator>→<indicator declarator>|<direct declarator>

<indicator>→<‘*‘>|< ‘*‘ 指针>

<direct declarator>→<ID>|<’[‘ ‘]’>|<‘[‘constexpr‘]‘>|<parameter>|<(‘ ‘)>|<ID list>

<compound statement>→<‘{‘ ‘}‘>|<statement list>|<declaration list>

<declaration list>→<declaration>|<declaration list>

<ID list>→<ID>(<ID list>|~)


<constexpr>→<conditional expression>

<parameter table>→<parameter declaration> (<parameter table>|~)


<declaration>→<declaration>|<declaration table declarated>

<initialise>→<assignment expression>|<“{}”“initialise table”>

<initialise table>→<initialise>|<‘initialise table‘initialise>

<statement list>→<statement>(<statement list>|~)

<statement>→<compound statement>|<expression statement>|<choose statement>|<iteration statement>|<skip statement>

<choose statement>→<if>|<IF (“expression”)ELSE expression declaration>

<iteration statement>→< WHILE >|< FOR >|< FOR ><statement>

<skip statement>→< CONTINUE >|< BREAK >< RETURN >< RETURN ><statement>

<unary operator>→ ‘&‘| ‘*‘| ‘+‘| ‘-‘| ‘~‘| ‘!‘

<storage class declarator>→< TYPEDEF >|< EXTERN >|< STATIC >|< AUTO >|< REGISTER >

<struct or unite declarator>→<struct or unite declarator><struct declaration table>
|<struct or unite><struct declaration table>|<struct or unite><ID>
<struct or unite declarator>→<struct or unite><ID><struct or unite><struct declaration table> <struct or unite declarator>‘
<struct or unite declarator>‘→<struct declaration table> <struct or unite declarator>‘|~

<struct or unite>→< STRUCT >|< UNION >


<struct declaration table>→<struct declaration> (<struct declaration table>|~)


<struct declaration>→<declarator qualifier table><struct declarator >

<declarator qualifier table>→<type declarator><declarator qualifier table>|<declarator qualifier table>


<struct declarator table>→<struct declaration> (<struct declaration table>|~)


<struct declaration>→<declaration>|<constant expression>|<constant expression><declaration>

<enumeration declaration>→<enumeration table>|<enumeration ID><enumeration table>|<enumeration ID>


<enumeration ID>→<enumeration>(<enumeration ID>|~)

<enumeration>→<标识符><ID>|constant expression><ID>

<function definition> →<type declaration><function name><parameter table>
<function name>→<ID>
<compound statement><parameter table>→<type declaration><variable name>
<compound statement>→<variable>|<statement>
<statement>→<expression statement>|<choose statement>|<circulate statement>|<skip statement>
<expression statement>→<assignment expression>|<relation expression>|
<logic expression>
<assignment expression>→ = | += | =+ | -= | =-
<relation expression> →| < | 〉=| <=
<logic expression>→ + | - | * | /
<choose statement>→ if else| switch
<circulate statement>→ for|while|do while
<skip statement>→ return|break|continue
<variable> → <type>丨<variable name>丨<variable values>
<type declaration> —> int丨char丨double丨float丨long
<variable name → S
S —> A|SB
A —> a|b|c|……y|z
B —> 0|1|2|3|4|5|6|7|8|9
<variable values> —> <word>丨<number>
<ID> → S
S —> a|b|c|……y|z|S
<word> →a|b|c|……y|z
<<number>→ S
A —> 1|2|3|4|5|6|7|8|9
S —> A|SA|SA0

C语言 文法规则之消除左递归