日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

使用Lex和Yacc开发C语言的编译器

發布時間:2025/6/15 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 使用Lex和Yacc开发C语言的编译器 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
(1) 從網站:http://www.lysator.liu.se/c/? 下載C語言的語法文件:
The ANSI C grammar ( Yacc ?and? Lex )?
(2) 編譯詞法文件: >?lex?c.l (3) 編譯語法文件:
>?yacc?-dv?c.y 說明:-d:產生頭文件y.yab.h,-v:產生分析表y.output。針對else產生的移進規約沖突,采用了yacc的默認動作“移進”解決。
(4) 編譯語法分析器:
>?cc?lex.yy.c?y.tab.c?-ll (5) 測試:
編寫測試程序test.c #include?"stdio.h"
int?main(){
????
int?a?=?0;
????
for(;?a?<?10;?a++){
????????printf(
"hello?from?sun!?");
????}

}
運行: >?./a.out?<?test.c
結果如下: ?"stdio.h"
int?(){
????????
int??=?;
????????
for(;??<?;?++){
????????????????
int("hello?from?sun?hong?hao!?");
????????}

}


發現c.y文件中沒有語義動作。只是進行了詞法掃描一下,所以得到結果就是上面的樣子了。

(5) 貼一下y.out里的規則:
???0??$accept?:?translation_unit?$end

???
1??primary_expression?:?IDENTIFIER
???
2?????????????????????|?CONSTANT
???
3?????????????????????|?STRING_LITERAL
???
4?????????????????????|?'('?expression?')'

???
5??postfix_expression?:?primary_expression
???
6?????????????????????|?postfix_expression?'['?expression?']'
???
7?????????????????????|?postfix_expression?'('?')'
???
8?????????????????????|?postfix_expression?'('?argument_expression_list?')'
???
9?????????????????????|?postfix_expression?'.'?IDENTIFIER
??
10?????????????????????|?postfix_expression?PTR_OP?IDENTIFIER
??
11?????????????????????|?postfix_expression?INC_OP
??
12?????????????????????|?postfix_expression?DEC_OP

??
13??argument_expression_list?:?assignment_expression
??
14???????????????????????????|?argument_expression_list?','?assignment_expression

??
15??unary_expression?:?postfix_expression
??
16???????????????????|?INC_OP?unary_expression
??
17???????????????????|?DEC_OP?unary_expression
??
18???????????????????|?unary_operator?cast_expression
??
19???????????????????|?SIZEOF?unary_expression
??
20???????????????????|?SIZEOF?'('?type_name?')'

??
21??unary_operator?:?'&'
??
22?????????????????|?'*'
??
23?????????????????|?'+'
??
24?????????????????|?'-'
??
25?????????????????|?'~'
??
26?????????????????|?'!'

??
27??cast_expression?:?unary_expression
??
28??????????????????|?'('?type_name?')'?cast_expression

??
29??multiplicative_expression?:?cast_expression
??
30????????????????????????????|?multiplicative_expression?'*'?cast_expression
??
31????????????????????????????|?multiplicative_expression?'/'?cast_expression
??
32????????????????????????????|?multiplicative_expression?'%'?cast_expression

??
33??additive_expression?:?multiplicative_expression
??
34??????????????????????|?additive_expression?'+'?multiplicative_expression
??
35??????????????????????|?additive_expression?'-'?multiplicative_expression

??
36??shift_expression?:?additive_expression
??
37???????????????????|?shift_expression?LEFT_OP?additive_expression
??
38???????????????????|?shift_expression?RIGHT_OP?additive_expression

??
39??relational_expression?:?shift_expression
??
40????????????????????????|?relational_expression?'<'?shift_expression
??
41????????????????????????|?relational_expression?'>'?shift_expression
??
42????????????????????????|?relational_expression?LE_OP?shift_expression
??
43????????????????????????|?relational_expression?GE_OP?shift_expression

??
44??equality_expression?:?relational_expression
??
45??????????????????????|?equality_expression?EQ_OP?relational_expression
??
46??????????????????????|?equality_expression?NE_OP?relational_expression

??
47??and_expression?:?equality_expression
??
48?????????????????|?and_expression?'&'?equality_expression

??
49??exclusive_or_expression?:?and_expression
??
50??????????????????????????|?exclusive_or_expression?'^'?and_expression

??
51??inclusive_or_expression?:?exclusive_or_expression
??
52??????????????????????????|?inclusive_or_expression?'|'?exclusive_or_expression

??
53??logical_and_expression?:?inclusive_or_expression
??
54?????????????????????????|?logical_and_expression?AND_OP?inclusive_or_expression

??
55??logical_or_expression?:?logical_and_expression
??
56????????????????????????|?logical_or_expression?OR_OP?logical_and_expression

??
57??conditional_expression?:?logical_or_expression
??
58?????????????????????????|?logical_or_expression?'?'?expression?':'?conditional_expression

??
59??assignment_expression?:?conditional_expression
??
60????????????????????????|?unary_expression?assignment_operator?assignment_expression

??
61??assignment_operator?:?'='
??
62??????????????????????|?MUL_ASSIGN
??
63??????????????????????|?DIV_ASSIGN
??
64??????????????????????|?MOD_ASSIGN
??
65??????????????????????|?ADD_ASSIGN
??
66??????????????????????|?SUB_ASSIGN
??
67??????????????????????|?LEFT_ASSIGN
??
68??????????????????????|?RIGHT_ASSIGN
??
69??????????????????????|?AND_ASSIGN
??
70??????????????????????|?XOR_ASSIGN
??
71??????????????????????|?OR_ASSIGN

??
72??expression?:?assignment_expression
??
73?????????????|?expression?','?assignment_expression

??
74??constant_expression?:?conditional_expression

??
75??declaration?:?declaration_specifiers?';'
??
76??????????????|?declaration_specifiers?init_declarator_list?';'

??
77??declaration_specifiers?:?storage_class_specifier
??
78?????????????????????????|?storage_class_specifier?declaration_specifiers
??
79?????????????????????????|?type_specifier
??
80?????????????????????????|?type_specifier?declaration_specifiers
??
81?????????????????????????|?type_qualifier
??
82?????????????????????????|?type_qualifier?declaration_specifiers

??
83??init_declarator_list?:?init_declarator
??
84???????????????????????|?init_declarator_list?','?init_declarator

??
85??init_declarator?:?declarator
??
86??????????????????|?declarator?'='?initializer

??
87??storage_class_specifier?:?TYPEDEF
??
88??????????????????????????|?EXTERN
??
89??????????????????????????|?STATIC
??
90??????????????????????????|?AUTO
??
91??????????????????????????|?REGISTER

??
92??type_specifier?:?VOID
??
93?????????????????|?CHAR
??
94?????????????????|?SHORT
??
95?????????????????|?INT
??
96?????????????????|?LONG
??
97?????????????????|?FLOAT
??
98?????????????????|?DOUBLE
??
99?????????????????|?SIGNED
?
100?????????????????|?UNSIGNED
?
101?????????????????|?struct_or_union_specifier
?
102?????????????????|?enum_specifier
?
103?????????????????|?TYPE_NAME

?
104??struct_or_union_specifier?:?struct_or_union?IDENTIFIER?'{'?struct_declaration_list?'}'
?
105????????????????????????????|?struct_or_union?'{'?struct_declaration_list?'}'
?
106????????????????????????????|?struct_or_union?IDENTIFIER

?
107??struct_or_union?:?STRUCT
?
108??????????????????|?UNION

?
109??struct_declaration_list?:?struct_declaration
?
110??????????????????????????|?struct_declaration_list?struct_declaration

?
111??struct_declaration?:?specifier_qualifier_list?struct_declarator_list?';'

?
112??specifier_qualifier_list?:?type_specifier?specifier_qualifier_list
?
113???????????????????????????|?type_specifier
?
114???????????????????????????|?type_qualifier?specifier_qualifier_list
?
115???????????????????????????|?type_qualifier

?
116??struct_declarator_list?:?struct_declarator
?
117?????????????????????????|?struct_declarator_list?','?struct_declarator

?
118??struct_declarator?:?declarator
?
119????????????????????|?':'?constant_expression
?
120????????????????????|?declarator?':'?constant_expression

?
121??enum_specifier?:?ENUM?'{'?enumerator_list?'}'
?
122?????????????????|?ENUM?IDENTIFIER?'{'?enumerator_list?'}'
?
123?????????????????|?ENUM?IDENTIFIER

?
124??enumerator_list?:?enumerator
?
125??????????????????|?enumerator_list?','?enumerator

?
126??enumerator?:?IDENTIFIER
?
127?????????????|?IDENTIFIER?'='?constant_expression

?
128??type_qualifier?:?CONST
?
129?????????????????|?VOLATILE

?
130??declarator?:?pointer?direct_declarator
?
131?????????????|?direct_declarator

?
132??direct_declarator?:?IDENTIFIER
?
133????????????????????|?'('?declarator?')'
?
134????????????????????|?direct_declarator?'['?constant_expression?']'
?
135????????????????????|?direct_declarator?'['?']'
?
136????????????????????|?direct_declarator?'('?parameter_type_list?')'
?
137????????????????????|?direct_declarator?'('?identifier_list?')'
?
138????????????????????|?direct_declarator?'('?')'

?
139??pointer?:?'*'
?
140??????????|?'*'?type_qualifier_list
?
141??????????|?'*'?pointer
?
142??????????|?'*'?type_qualifier_list?pointer

?
143??type_qualifier_list?:?type_qualifier
?
144??????????????????????|?type_qualifier_list?type_qualifier

?
145??parameter_type_list?:?parameter_list
?
146??????????????????????|?parameter_list?','?ELLIPSIS

?
147??parameter_list?:?parameter_declaration
?
148?????????????????|?parameter_list?','?parameter_declaration

?
149??parameter_declaration?:?declaration_specifiers?declarator
?
150????????????????????????|?declaration_specifiers?abstract_declarator
?
151????????????????????????|?declaration_specifiers

?
152??identifier_list?:?IDENTIFIER
?
153??????????????????|?identifier_list?','?IDENTIFIER

?
154??type_name?:?specifier_qualifier_list
?
155????????????|?specifier_qualifier_list?abstract_declarator

?
156??abstract_declarator?:?pointer
?
157??????????????????????|?direct_abstract_declarator
?
158??????????????????????|?pointer?direct_abstract_declarator

?
159??direct_abstract_declarator?:?'('?abstract_declarator?')'
?
160?????????????????????????????|?'['?']'
?
161?????????????????????????????|?'['?constant_expression?']'
?
162?????????????????????????????|?direct_abstract_declarator?'['?']'
?
163?????????????????????????????|?direct_abstract_declarator?'['?constant_expression?']'
?
164?????????????????????????????|?'('?')'
?
165?????????????????????????????|?'('?parameter_type_list?')'
?
166?????????????????????????????|?direct_abstract_declarator?'('?')'
?
167?????????????????????????????|?direct_abstract_declarator?'('?parameter_type_list?')'

?
168??initializer?:?assignment_expression
?
169??????????????|?'{'?initializer_list?'}'
?
170??????????????|?'{'?initializer_list?','?'}'

?
171??initializer_list?:?initializer
?
172???????????????????|?initializer_list?','?initializer

?
173??statement?:?labeled_statement
?
174????????????|?compound_statement
?
175????????????|?expression_statement
?
176????????????|?selection_statement
?
177????????????|?iteration_statement
?
178????????????|?jump_statement

?
179??labeled_statement?:?IDENTIFIER?':'?statement
?
180????????????????????|?CASE?constant_expression?':'?statement
?
181????????????????????|?DEFAULT?':'?statement

?
182??compound_statement?:?'{'?'}'
?
183?????????????????????|?'{'?statement_list?'}'
?
184?????????????????????|?'{'?declaration_list?'}'
?
185?????????????????????|?'{'?declaration_list?statement_list?'}'

?
186??declaration_list?:?declaration
?
187???????????????????|?declaration_list?declaration

?
188??statement_list?:?statement
?
189?????????????????|?statement_list?statement

?
190??expression_statement?:?';'
?
191???????????????????????|?expression?';'

?
192??selection_statement?:?IF?'('?expression?')'?statement
?
193??????????????????????|?IF?'('?expression?')'?statement?ELSE?statement
?
194??????????????????????|?SWITCH?'('?expression?')'?statement

?
195??iteration_statement?:?WHILE?'('?expression?')'?statement
?
196??????????????????????|?DO?statement?WHILE?'('?expression?')'?';'
?
197??????????????????????|?FOR?'('?expression_statement?expression_statement?')'?statement
?
198??????????????????????|?FOR?'('?expression_statement?expression_statement?expression?')'?statement

?
199??jump_statement?:?GOTO?IDENTIFIER?';'
?
200?????????????????|?CONTINUE?';'
?
201?????????????????|?BREAK?';'
?
202?????????????????|?RETURN?';'
?
203?????????????????|?RETURN?expression?';'

?
204??translation_unit?:?external_declaration
?
205???????????????????|?translation_unit?external_declaration

?
206??external_declaration?:?function_definition
?
207???????????????????????|?declaration

?
208??function_definition?:?declaration_specifiers?declarator?declaration_list?compound_statement
?
209??????????????????????|?declaration_specifiers?declarator?compound_statement
?
210??????????????????????|?declarator?declaration_list?compound_statement
?
211??????????????????????|?declarator?compound_statement

總結

以上是生活随笔為你收集整理的使用Lex和Yacc开发C语言的编译器的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。