#include<stdio.h>
int main()
{
int a,b;
a=a+b;
printf("%d",a);
return 0;
}
應該是什麼樣的輸出,如果這個代碼是通過詞法詞法分析器的輸出應該在c中?
#include<stdio.h>
int main()
{
int a,b;
a=a+b;
printf("%d",a);
return 0;
}
應該是什麼樣的輸出,如果這個代碼是通過詞法詞法分析器的輸出應該在c中?
詞法分析器只是標記流以將字符流轉換爲標記流(稍後將使用解析器解析以獲取完整的語法樹)。爲了您的例子中,你將獲得類似:
#include <stdio.h> (this is handled by preprocessor, not by lexer so it wouldn't exist)
int KEYWORD
main IDENTIFIER
(LPAR
) RPAR
{ LBRACE
int KEYWORD
a IDENT
, COMMA
b IDENT
; SEMICOL
a IDENT
= ASSIGN
a IDENT
+ PLUS
b IDENT
; SEMICOL
printf IDENT
(LPAR
"%d" STRING
, COMMA
a IDENT
) RPAR
; SEMICOL
return RETURN_KEYWORD
0 INTEGER
; SEMICOL
} RBRACE
當然詞法分析本身不能做太多,它只能分割成源可能最小的元素,檢查語法錯誤(比如拼錯的關鍵字)。你需要一些能夠將它們結合起來賦予它們語義的東西。
只是一個側面說明:一些詞法分析器喜歡將類似的各種令牌,在短短一個用與它相關的參數,而另一些則對每一個像RETURN_KEYWORK
不同的令牌(例如包含所有關鍵字KEYWORD
令牌) ,IF_KEYWORD
等等。
預處理指令將不存在輸入到編譯器的預處理程序會消耗他們過去了。因此#include<stdio.h>
將被替換爲stdio.h
文件的內容。
所得文件會被scanner
根據其可以發現here和將被傳遞到如parser
,當它要求令牌lexical rules
被分解成tokens
。
不管它是最方便的解析器使用。 – 2010-04-18 12:43:08