呵呵,雕欄玉砌應猶在 <br> <br> <b>今天是偉大祖 |
送交者: 酸亦鮮 2021年10月04日02:02:26 於 [靈機一動] 發送悄悄話 |
呵呵,雕欄玉砌應猶在
今天是偉大祖國第七十二個國慶,就不吟什麼“異域風光不敢看”了,饒了你們這幫“七癆八傷腎虛膝軟的撈鬆孬種”一日吧。 今天想起一件比較後悔的事,就是當年上學時沒問問Kim(人名)教授:“出於什麼動機我們要從CFG中去除右邊為空的生成規則 P→ε ”。雖然現在覺得自己想明白了,但沒有辦法印證我的想法是對的,網上也查不到答案,沒人提出這個問題。也許他們認為這個自然的,自古以來就是然的。哪位同學懂,請說說你的答案使我確定一下我想得對吧。 說件在華南工學院的糗事:記得當年學“帕撕卡語言”時,課本上將指針的符號印成“↑”。當時華南工學院計算機系都沒計算機,計算機系純“紙上談‘機’”,好不容易才有機會能摸一下“蘋果二”,找遍鍵盤都沒找到“↑”,當時想死的心都有。記得老師不知從哪裡搞了個“蘋果二”上的“帕撕卡語言編譯器”兩張360K的五吋軟盤在驅動器上換來換去才可以。我就沒辦法將這個所謂“編譯器”運行起來。華南工學院對我們挺刻薄的,兩張軟盤還要自己出錢買。還貴得要死,10幾塊錢人民幣一張,真不知老師有沒有在我們身上刮肉。反正當時我們窮得要死。軟盤是雙面的,但“蘋果二”上的驅動器卻是單面的。所以老師還給我們出個主意,在另一邊也剪一個缺口以便將軟盤翻過來塞進驅動器也不會禁止寫(五吋軟盤與三吋軟盤不一樣,缺口封上表示“寫保護”)。這樣整個操作就更複雜了。像我這樣的天才就根本搞不過來。操,什麼世道!中國科學院在華南工學院一角存有一台帶六十個終端“霍尼威爾DPS8”中型機,是在中美“蜜月期”美國指使“世界銀行”給的“無息貸款”買的。但我們根本沒機會摸。記得在剛將機器裝好時確曾給我們玩了幾下讓他們試機,其實當時我們根本不會玩。還騙我們花了好幾塊錢買了個他們翻譯的《操作手冊》(比《高等數學》的課本貴)。完全是冤枉錢因為後來“霍尼威爾DPS8”中型機就不給我們用了。黑啊。後來到了學《數據結構》時,又給我們幾個小時的機時(當時的操作系統會在你從Login就開始計時,時間用完就得另買時間,不給錢就不給用了。不但用CPU要收錢,用內存用磁盤空間都收費。打印也要收錢)。一個程序都沒走起來時間就用完了,畢竟幾年都沒摸過計算機,手生得很,幾個小時的時光在膀胱都還沒來得及裝滿一泡尿前就蹓走,完了。還有就是進門還要換拖鞋,我真懷疑我的香港腳就是那時染上的。最好笑的是那些“專家”(操作員?)還故作神秘地說“換拖鞋已經是管得鬆了。兄弟我在米國受訓時,入門還要‘吹風’吹掉身上的灰塵”。我當時心想沒叫你沐浴後換衣服算管得鬆了。來美國後才知道哪個“吹風”叫“風簾機”,計算機中心就根本沒有,人家用的是玻璃門。超市倒是有這玩藝。而且它也根本不是為了“吹掉身上的灰塵”。一群豬一樣的貨色還好意思到美國“受訓”。後來謠傳說DPS8來的時候還附帶了一台DPS6小型機,白送給華南工學院計算機系了。還說得“有的鼻子有眼,有的沒有”,還可以帶十來個終端什麼云云。反正學校沒正式公布這個消息,我沒見過這個機器,也不知道放這個機器的房子在哪裡。反正學《計算機操作系統》時楊學偉(人名)搞到兩台IBM-PC/AT286裝了個Xenix(是這個音,希望我沒串錯字)胡弄我們。他一個機械系的,屁都不懂就給我們講《計算機操作系統》,還讓我們做“信號燈”實驗。屁都說不清楚,前半學期胡說些 C 語言。後半學期照着書唸。反正當時我還以為“信號燈”就是“全局變量”。搞了半天沒搞出“信號燈”的效果。倒是真見到沒有“信號燈”的效果,各位同學打印的內容混在一起(估計是因為大家用同一帳號Login,不同帳號打印理應由SPOOLING系統分開不會混在一起的,楊學偉(人名)知道啥SPOOLING,只會照着書唸)。啥沒學到,幾晚的實驗課只用計算機打印了個當年日曆。打印紙倒是不用收錢。但卻不是有孔一頁頁那種。而是像擦屁股紙那樣一大卷的。打着打着就走歪了(太重,打印機進紙機械的磨擦力帶不動)。他還敢怨我們浪費紙張。看來說華南工學院計算機系有個“霍尼威爾DPS6”小型機根本就是當時的業餘五毛吹噓祖國繁榮興旺的小作品。否則楊學偉(人名)也不會讓我們到IBM-PC/AT286上亂搞。唉,一切都像夢一場。偉大祖國到底有沒有幾個“學習成績‘很’好”的嘛。起來走兩步嘛(華南工學院計算機系代系歌:起來,學習成績很好的同學,離開那個輪椅走上兩步,中華民族到了沒有計算機的時候)。不至於華為(人名)(唸話為,小說《紅岩》里江姐(人名)的契弟,渣滓洞監獄瘋子華子良(人名)與華瑩山游擊隊女匪首雙槍老太婆(人名)的兒子,重慶大學大學生。什麼世道嘛,中華民國時期那麼少人能有機會上大學,居然還讓敵人的兒子占了一個學位,還策反拐跑了一個資產階級的女兒,女大學生孫明霞(人名)。真不明白有沒有工農子弟被資產階級小姐給策反的。當時上大學沒有“政審”這一關麼?當時中共有個文藝規定,文藝作品裡共產黨不允許有女特務或女公安偵察員,國民黨的對手角色必須是女的。這樣為了開展工作,即使上了床,也是共產黨吃國民黨的豆腐。不明白為什麼明明是男的損失精液,卻是吃了別人,與《聊齋》的說法完全相反)被禁運就改行養豬了。兩萬個清華計算機系大學畢業生,養豬肯定是養不過一百個華南農學院畜牧系的畢業生的嘛。呵呵。只要美國再堅持最後五分鐘不開禁,華為(人名)的隊伍都要散了改投傑克馬(人名)門下去享受他們前幾世修來的996寫網頁的福份了。吖,一眨眼之間,中美都從“蜜月”走到“掟煲”了。飯桶們(人名)也都垂垂老矣,能飯倒是尚能飯,但估計離頃之三遺矢也不會太遠了吧。 今天就說這些吧。下邊給兩個CFGs,大家對比一下有啥不同吧。那個帕撕卡的語法含有 P→ε 我也發現了,不算今天的答案。還有更本質的不同。要說出為啥會這樣。祝大家避疫愉快,平安渡過。希望疫情解除後大家還能完璧歸來,全須全眼,沒被科學家用納米脂肪粒“駭客”過你們的細胞。一句話,保持數據和代碼intact最重要。 屁馥喇嘛(人名)懂不懂mRNA技術。想與你合夥做香水生意。我們可以將麝香、龍涎香的mRNA模板做成針劑出售,打一針能香九個月以上。到時不但屎尿香,放屁都香。香水針劑的名字我都想好了,叫“抹香猴”。北方說“包子有肉不在褶上”,廣東說“有麝自然香”。同一個意思。 Context-free Grammar for Standard Pascal 1. <Program>::= <ProgramHeader> <Declarations> <CompoundStatement> . 2. <ProgramHeader>::= program id ; | program id ( <IdList> ) ; 3. <Declarations>::= <ConstantDefinitions> <TypeDefinitions> <VariableDeclarations> <ProcedureDeclarations> 4. <ConstantDefinitions>::= ε | const <ConstantDefinitionList> 5. <ConstantDefinitionList>::= <ConstDef> | <ConstDef> <ConstantDefinitionList> 6. <ConstDef>::= id = constant ; 7. <TypeDefinitions>::= ε | type <TypeDefinitionList> 8. <TypeDefinitionList>::= <TypeDef> | <TypeDef> <TypeDefinitionList> 9. <TypeDef>::= id = <TypeSpecifier> ; 10. <VariableDeclarations>::= ε | var <VariableDeclarationList> 11. <VariableDeclarationList>::= <VarDec> | <VarDec> <VariableDeclarationList> 12. <VarDec>::= <IdList> : <TypeSpecifier> ; 13. <ProcedureDeclarations>::= ε | <ProcDec> <ProcedureDeclarations> 14. <ProcDec>::= <ProcHeader> forward ; | <ProcHeader> <Declarations> <CompoundStatement> ; | <FuncHeader> forward ; | <FuncHeader> <Declarations> <CompoundStatement> ; 15. <ProcHeader>::= procedure id <Arguments> ; 16. <FuncHeader>::= function id <Arguments> : <TypeSpecifier> ; 17. <Arguments>::= ε | ( <ArgumentList> ) 18. <ArgumentList>::= <Arg> | <Arg> ; <ArgumentList> 19. <Arg>::= <IdList> : <TypeSpecifier> | var <IdList> : <TypeSpecifer> 20. <CompoundStatement>::= begin <StatementList> end 21. <StatementList>::= <Statement> | <Statement> ; <StatementList> 22. <Statement>::= ε | <CompoundStatement> | <AssignmentStatement> | <ProcedureCall> | <ForStatement> | <WhileStatement> | <IfStatement> | <CaseStatement> | <RepeatStatement> 23. <AssignmentStatement>::= <Variable> := <Expression> 24. <ProcedureCall>::= id <Actuals> 25. <ForStatement>::= for id := <Expression> to <Expression> do <Statement> | for id := <Expression> downto <Expression> do <Statement> 26. <WhileStatement>::= while <Expression> do <Statement> 27. <IfStatement>::= if <Expression> then <Statement> | if <Expression> then <Statement> else <Statement> 28. <RepeatStatement>::= repeat <StatementList> until <Expression> 29. <CaseStatement>::= case <Expression> of <CaseList> end 30. <CaseList>::= <Case> | <Case> ; <CaseList> 31. <Case>::= <ConstantList> : <Statement> 32. <ConstantList>::= constant | constant , <ConstantList> 33. <Expression>::= <SimpleExpression> | <SimpleExpression> = <SimpleExpression> | <SimpleExpression> <> <SimpleExpression> | <SimpleExpression> < <SimpleExpression> | <SimpleExpression> <= <SimpleExpression> | <SimpleExpression> > <SimpleExpression> | <SimpleExpression> >= <SimpleExpression> 34. <SimpleExpression>::= <Term> | <SimpleExpression> + <Term> | <SimpleExpression> - <Term> | <SimpleExpression> or <Term> 35. <Term>::= <Factor> | <Term> * <Factor> | <Term> / <Factor> | <Term> div <Factor> | <Term> mod <Factor> | <Term> and <Factor> 36. <Factor>::= ( <Expression> ) | + <Factor> | - <Factor> | not <Factor> | <FunctionCall> | constant | <Variable> 37. <FunctionCall>::= id <Actuals> 38. <Actuals>::= ε | ( <ExpressionList> ) 39. <ExpressionList>::= <Expresssion> | <Expression> , <ExpressionList> 40. <Variable>::= id | <Variable> . id | <Variable> ^ | <Variable> [ <ExpressionList> ] 41. <TypeSpecifier>::= id | ^ <TypeSpecifier> | ( <IdList> ) | constant .. constant | array [ <DimensionList> ] of <TypeSpecifier> | record <FieldList> end | file of <TypeSpecifier> 42. <DimensionList>::= <Dimension> | <Dimension> , <DimensionList> 43. <Dimension>::= constant .. constant | id 44. <FieldList>::= <Field> | <Field> ; <FieldList> 45. <Field>::= <IdList> : <TypeSpecifier> 46. <IdList>::= id | id , <IdList> ============================================================================== C grammar from n1124_pdf Annex A (informative) Language syntax summary 1 NOTE The notation is described in 6.1. 1. <token>::= <keyword> | <identifier> | <constant> | <string-literal> | <punctuator> 2. <preprocessing-token>::= <header-name> | <identifier> | <pp-number> | <character-constant> | <string-literal> | <punctuator> | each non-white-space character that cannot be one of the above 3. <keyword>::= one of auto break case char const continue default do double else enum extern float for goto if inline int long register restrict return short signed sizeof static struct switch typedef union unsigned void volatile while _Bool _Complex _Imaginary 4. <identifier>::= <identifier-nondigit> | <identifier> <identifier-nondigit> | <identifier> <digit> 5. <identifier-nondigit>::= <nondigit> | <universal-character-name> | other implementation-defined characters 6. <nondigit>::= one of _ a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z 7. <digit>::= one of 0 1 2 3 4 5 6 7 8 9 8. <universal-character-name>::= u <hex-quad> | U <hex-quad> <hex-quad> 9. <hex-quad>::= <hexadecimal-digit> <hexadecimal-digit> | <hexadecimal-digit> <hexadecimal-digit> 10. <constant>::= <integer-constant> | <floating-constant> | <enumeration-constant> | <character-constant> 11. <integer-constant>::= <decimal-constant> <integer-suffix>_opt | <octal-constant> <integer-suffix>_opt | <hexadecimal-constant> <integer-suffix>_opt 12. <decimal-constant>::= <nonzero-digit> | <decimal-constant> <digit> 13. <octal-constant>::= 0 | <octal-constant> <octal-digit> 14. <hexadecimal-constant>::= <hexadecimal-prefix> <hexadecimal-digit> | <hexadecimal-constant> <hexadecimal-digit> 15. <hexadecimal-prefix>::= one of 0x 0X 16. <nonzero-digit>::= one of 1 2 3 4 5 6 7 8 9 17. <octal-digit>::= one of 0 1 2 3 4 5 6 7 18. <hexadecimal-digit>::= one of 0 1 2 3 4 5 6 7 8 9 a b c d e f A B C D E F 19. <integer-suffix>::= <unsigned-suffix> <long-suffix>_opt | <unsigned-suffix> <long-long-suffix> | <long-suffix> <unsigned-suffix>_opt | <long-long-suffix> <unsigned-suffix>_opt 20. <unsigned-suffix>::= one of u U 21. <long-suffix>::= one of l L 22. <long-long-suffix>::= one of ll LL 23. <floating-constant>::= <decimal-floating-constant> | <hexadecimal-floating-constant> 24. <decimal-floating-constant>::= <fractional-constant> <exponent-part>_opt <floating-suffix>_opt | <digit-sequence> <exponent-part> <floating-suffix>_opt 25. <hexadecimal-floating-constant>::= <hexadecimal-prefix> <hexadecimal-fractional-constant> | <binary-exponent-part> <floating-suffix>_opt | <hexadecimal-prefix> <hexadecimal-digit-sequence> | <binary-exponent-part> <floating-suffix>_opt 26. <fractional-constant>::= <digit-sequence>_opt . <digit-sequence> | <digit-sequence> . 27. <exponent-part>::= e <sign>_opt <digit-sequence> | E <sign>_opt <digit-sequence> 28. <sign>::= one of + - 29. <digit-sequence>::= <digit> | <digit-sequence> <digit> 30. <hexadecimal-fractional-constant>::= <hexadecimal-digit-sequence>_opt . | <hexadecimal-digit-sequence> | <hexadecimal-digit-sequence> . 31. <binary-exponent-part>::= p <sign>_opt <digit-sequence> | P <sign>_opt <digit-sequence> 32. <hexadecimal-digit-sequence>::= <hexadecimal-digit> | <hexadecimal-digit-sequence> <hexadecimal-digit> 33. <floating-suffix>::= one of flFL 34. <enumeration-constant>::= <identifier> 35. <character-constant>::= ' <c-char-sequence> ' | L' <c-char-sequence> ' 36. <c-char-sequence>::= <c-char> | <c-char-sequence> <c-char> 37. <c-char>::= any member of the source character set except the single-quote ', backslash , or <new-line> character | <escape-sequence> 38. <escape-sequence>::= <simple-escape-sequence> | <octal-escape-sequence> | <hexadecimal-escape-sequence> | <universal-character-name> 39. <simple-escape-sequence>::= one of ' " ? a b f n r t v 40. <octal-escape-sequence>::= <octal-digit> | <octal-digit> <octal-digit> | <octal-digit> <octal-digit> <octal-digit> 41. <hexadecimal-escape-sequence>::= x <hexadecimal-digit> | <hexadecimal-escape-sequence> <hexadecimal-digit> 42. <string-literal>::= " <s-char-sequence>_opt " | L" <s-char-sequence>_opt " 43. <s-char-sequence>::= <s-char> | <s-char-sequence> <s-char> 44. <s-char>::= any member of the source character set except the double-quote ", backslash , or <new-line> character | <escape-sequence> 45. <punctuator>::= one of [ ] ( ) { } . -> ++ -- & * + - ~ ! / % << >> < > <= >= == != ^ | && || ? : ; ... = *= /= %= += -= <<= >>= &= ^= |= , # ## <: :> <% %> %: %:%: 46. <header-name>::= < <h-char-sequence> > | " <q-char-sequence> " 47. <h-char-sequence>::= <h-char> | <h-char-sequence> <h-char> 48. <h-char>::= any member of the source character set except the <new-line> character and > 49. <q-char-sequence>::= <q-char> | <q-char-sequence> <q-char> 50. <q-char>::= any member of the source character set except the <new-line> character and " 51. <pp-number>::= <digit> | . <digit> | <pp-number> <digit> | <pp-number> <identifier-nondigit> | <pp-number> e <sign> | <pp-number> E <sign> | <pp-number> p <sign> | <pp-number> P <sign> | <pp-number> . 52. <primary-expression>::= <identifier> | <constant> | <string-literal> | ( <expression> ) 53. <postfix-expression>::= <primary-expression> | <postfix-expression> [ <expression> ] | <postfix-expression> ( <argument-expression-list>_opt ) | <postfix-expression> . <identifier> | <postfix-expression> -> <identifier> | <postfix-expression> ++ | <postfix-expression> -- | ( <type-name> ) { <initializer-list> } | ( <type-name> ) { <initializer-list> , } 54. <argument-expression-list>::= <assignment-expression> | <argument-expression-list> , <assignment-expression> 55. <unary-expression>::= <postfix-expression> | ++ <unary-expression> | -- <unary-expression> | <unary-operator> <cast-expression> | sizeof <unary-expression> | sizeof ( <type-name> ) 56. <unary-operator>::= one of & * + - ~ ! 57. <cast-expression>::= <unary-expression> | ( <type-name> ) <cast-expression> 58. <multiplicative-expression>::= <cast-expression> | <multiplicative-expression> * <cast-expression> | <multiplicative-expression> / <cast-expression> | <multiplicative-expression> % <cast-expression> 59. <additive-expression>::= <multiplicative-expression> | <additive-expression> + <multiplicative-expression> | <additive-expression> - <multiplicative-expression> 60. <shift-expression>::= <additive-expression> | <shift-expression> << <additive-expression> | <shift-expression> >> <additive-expression> 61. <relational-expression>::= <shift-expression> | <relational-expression> < <shift-expression> | <relational-expression> > <shift-expression> | <relational-expression> <= <shift-expression> | <relational-expression> >= <shift-expression> 62. <equality-expression>::= <relational-expression> | <equality-expression> == <relational-expression> | <equality-expression> != <relational-expression> 63. <AND-expression>::= <equality-expression> | <AND-expression> & <equality-expression> 64. <exclusive-OR-expression>::= <AND-expression> | <exclusive-OR-expression> ^ <AND-expression> 65. <inclusive-OR-expression>::= <exclusive-OR-expression> | <inclusive-OR-expression> | <exclusive-OR-expression> 66. <logical-AND-expression>::= <inclusive-OR-expression> | <logical-AND-expression> && <inclusive-OR-expression> 67. <logical-OR-expression>::= <logical-AND-expression> | <logical-OR-expression> || <logical-AND-expression> 68. <conditional-expression>::= <logical-OR-expression> | <logical-OR-expression> ? <expression> : <conditional-expression> 69. <assignment-expression>::= <conditional-expression> | <unary-expression> <assignment-operator> <assignment-expression> 70. <assignment-operator>::= one of = *= /= %= += -= <<= >>= &= ^= |= 71. <expression>::= <assignment-expression> | <expression> , <assignment-expression> 72. <constant-expression>::= <conditional-expression> 73. <declaration>::= <declaration-specifiers> <init-declarator-list>_opt ; 74. <declaration-specifiers>::= <storage-class-specifier> <declaration-specifiers>_opt | <type-specifier> <declaration-specifiers>_opt | <type-qualifier> <declaration-specifiers>_opt | <function-specifier> <declaration-specifiers>_opt 75. <init-declarator-list>::= <init-declarator> | <init-declarator-list> , <init-declarator> 76. <init-declarator>::= <declarator> | <declarator> = <initializer> 77. <storage-class-specifier>::= typedef | extern | static | auto | register 78. <type-specifier>::= void | char | short | int | long | float | double | signed | unsigned | _Bool | _Complex | <struct-or-union-specifier> | <enum-specifier> | <typedef-name> 79. <struct-or-union-specifier>::= <struct-or-union> <identifier>_opt { <struct-declaration-list> } | <struct-or-union> <identifier> 80. <struct-or-union>::= struct | union 81. <struct-declaration-list>::= <struct-declaration> | <struct-declaration-list> <struct-declaration> 82. <struct-declaration>::= <specifier-qualifier-list> <struct-declarator-list> ; 83. <specifier-qualifier-list>::= <type-specifier> <specifier-qualifier-list>_opt | <type-qualifier> <specifier-qualifier-list>_opt 84. <struct-declarator-list>::= <struct-declarator> | <struct-declarator-list> , <struct-declarator> 85. <struct-declarator>::= <declarator> | <declarator>_opt : <constant-expression> 86. <enum-specifier>::= enum <identifier>_opt { <enumerator-list> } | enum <identifier>_opt { <enumerator-list> , } | enum <identifier> 87. <enumerator-list>::= <enumerator> | <enumerator-list> , <enumerator> 88. <enumerator>::= <enumeration-constant> | <enumeration-constant> = <constant-expression> 89. <type-qualifier>::= const | restrict | volatile 90. <function-specifier>::= inline 91. <declarator>::= <pointer>_opt <direct-declarator> 92. <direct-declarator>::= <identifier> | ( <declarator> ) | <direct-declarator> [ <type-qualifier-list>_opt <assignment-expression>_opt ] | <direct-declarator> [ static <type-qualifier-list>_opt <assignment-expression> ] | <direct-declarator> [ <type-qualifier-list> static <assignment-expression> ] | <direct-declarator> [ <type-qualifier-list>_opt * ] | <direct-declarator> ( <parameter-type-list> ) | <direct-declarator> ( <identifier-list>_opt ) 93. <pointer>::= * <type-qualifier-list>_opt | * <type-qualifier-list>_opt <pointer> 94. <type-qualifier-list>::= <type-qualifier> | <type-qualifier-list> <type-qualifier> 95. <parameter-type-list>::= <parameter-list> | <parameter-list> , ... 96. <parameter-list>::= <parameter-declaration> | <parameter-list> , <parameter-declaration> 97. <parameter-declaration>::= <declaration-specifiers> <declarator> | <declaration-specifiers> <abstract-declarator>_opt 98. <identifier-list>::= <identifier> | <identifier-list> , <identifier> 99. <type-name>::= <specifier-qualifier-list> <abstract-declarator>_opt 100. <abstract-declarator>::= <pointer> | <pointer>_opt <direct-abstract-declarator> 101. <direct-abstract-declarator>::= ( <abstract-declarator> ) | <direct-abstract-declarator>_opt [ <assignment-expression>_opt ] | <direct-abstract-declarator>_opt [*] | <direct-abstract-declarator>_opt ( <parameter-type-list>_opt ) 102. <typedef-name>::= <identifier> 103. <initializer>::= <assignment-expression> | { <initializer-list> } | { <initializer-list> , } 104. <initializer-list>::= <designation>_opt <initializer> | <initializer-list> , <designation>_opt <initializer> 105. <designation>::= <designator-list> = 106. <designator-list>::= <designator> | <designator-list> <designator> 107. <designator>::= [ <constant-expression> ] | . <identifier> 108. <statement>::= <labeled-statement> | <compound-statement> | <expression-statement> | <selection-statement> | <iteration-statement> | <jump-statement> 109. <labeled-statement>::= <identifier> : <statement> | case <constant-expression> : <statement> | default : <statement> 110. <compound-statement>::= { <block-item-list>_opt } 111. <block-item-list>::= <block-item> | <block-item-list> <block-item> 112. <block-item>::= <declaration> | <statement> 113. <expression-statement>::= <expression>_opt ; 114. <selection-statement>::= if ( <expression> ) <statement> | if ( <expression> ) <statement> else <statement> | switch ( <expression> ) <statement> 115. <iteration-statement>::= while ( <expression> ) <statement> | do <statement> while ( <expression> ) ; | for ( <expression>_opt ; <expression>_opt ; <expression>_opt ) <statement> | for ( <declaration> <expression>_opt ; <expression>_opt ) <statement> 116. <jump-statement>::= goto <identifier> ; | continue ; | break ; | return <expression>_opt ; 117. <translation-unit>::= <external-declaration> | <translation-unit> <external-declaration> 118. <external-declaration>::= <function-definition> | <declaration> 119. <function-definition>::= <declaration-specifiers> <declarator> <declaration-list>_opt <compound-statement> 120. <declaration-list>::= <declaration> | <declaration-list> <declaration> 121. <preprocessing-file>::= <group>_opt 122. <group>::= <group-part> | <group> <group-part> 123. <group-part>::= <if-section> | <control-line> | <text-line> | # <non-directive> 124. <if-section>::= <if-group> <elif-groups>_opt <else-group>_opt <endif-line> 125. <if-group>::= # if <constant-expression> <new-line> <group>_opt | # ifdef <identifier> <new-line> <group>_opt | # ifndef <identifier> <new-line> <group>_opt 126. <elif-groups>::= <elif-group> | <elif-groups> <elif-group> 127. <elif-group>::= # elif <constant-expression> <new-line> <group>_opt 128. <else-group>::= # else <new-line> <group>_opt 129. <endif-line>::= # endif <new-line> 130. <control-line>::= # include <pp-tokens> <new-line> | # define <identifier> <replacement-list> <new-line> | # define <identifier> <lparen> <identifier-list>_opt ) <replacement-list> <new-line> | # define <identifier> <lparen> ... ) <replacement-list> <new-line> | # define <identifier> <lparen> <identifier-list> , ... ) <replacement-list> <new-line> | # undef <identifier> <new-line> | # line <pp-tokens> <new-line> | # error <pp-tokens>_opt <new-line> | # pragma <pp-tokens>_opt <new-line> | # <new-line> 131. <text-line>::= <pp-tokens>_opt <new-line> 132. <non-directive>::= <pp-tokens> <new-line> 133. <lparen>::= a ( character not immediately preceded by white-space 134. <replacement-list>::= <pp-tokens>_opt 135. <pp-tokens>::= <preprocessing-token> | <pp-tokens> <preprocessing-token> 136. <new-line>::= the new-line character |
|
|
|
實用資訊 | |