總結 lex.l 生產詞法分析器 掃瞄輸入檔案 分割乙個個的詞 return給語法分析 最後返回0 表示詞法結束。。然後語法分析 匹配 將所有詞的組合 匹配第乙個(初始)規則,如果 匹配成功 則執行對應動作 出錯則呼叫yyerror函式
yacc.y
#include
%}%token noun pronoun verb adverb adjective preposition conjunction
%%sentence: ******_sentence
| compound_sentence
;******_sentence: subject verb object
| subject verb object prep_phrase
;compound_sentence: ******_sentence conjunction ******_sentence
| compound_sentence conjunction ******_sentence
;subject : noun
| pronoun
| adjective subject
;verb: verb
| adjective object
;object: noun
| adjective object
;prep_phrase: preposition noun;
%%//extern file *yyin;
int main()
}int yyerror(char *s)
%%\n
\.\n
^verb
^adj
^adv
^noun
^prep
^pron
^conj
[a-za-z]+ else }}
%%/*
int main()
*/struct word ;
struct word *word_list;
int add_word(int type, char *word)
wp = (struct word*) malloc(sizeof(struct word));
wp->next = word_list;
wp->word_name = (char *)malloc(strlen(word)+1);
strcpy(wp->word_name, word);
wp->word_type = type;
word_list = wp;
return 1;
}int lookup_word(char *word)
}return lookup; //未找到
}
Lex與Yacc的結合
lex與yacc的結合 首先,我就不介紹lex的語法規則了,因為在一些書上這些是重點介紹的內容,我先把lex的源程式寫在下面,然後講解。number 0 9 其中 define number 257 define plus 258 define sub 259 define chen 260 def...
Lex與Yacc學習(九)之Yacc語法
本文討論yacc語法的格式並描述可用的各種特徵和選項 yacc語法包括三部分 定義段 規則段和使用者子例程段 定義段.規則段.使用者子例程段.各部分由以兩個百分號開頭的行分開,儘管某乙個部分可以為空,但是前兩部分是必須的,第三部分和前面的百分號可以省略。yacc 語法由符號組成,即語法的 詞 符號是...
Lex與Yacc學習(十)之Yacc庫
每個實現都需要有用的例程庫,在unix系統中,可以通過cc命令列尾端給出 ly標誌 或通過其他系統下的等價物 來包含庫。庫的內容在不同的實現之間是不同的,但總是包括main 和yyerror yacc的所有版本都帶有最小的主程式,該程式對於簡短程式和測試有時是很有用的,它非常簡單,如下所示 main...