yacc 與lex單元1示例

2021-07-11 00:59:32 字數 1380 閱讀 6918

總結 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...