gawk awk3.c源碼分析

gawk awk3.c源碼分析
本來昨天要完成的,昨天晚上睡得太早,就忘記了,今天打開電腦
,第一件事,就是把這篇完成。
這個文件主要完成一些內部函數的定義。
先定義了一些外部變量,就於對應awk程序中的NF,FS,RS,NR,FILENAME,OFS,ORS,OFMT之類。
inin_vars()
  這個函數主要用於完成對NF,FS,RS,NR,FILENAME,OFS,ORS,OFMT變量的初始化
  並且對dumb[]進行了初始化

get_ofmt()
get_fs()
用於得到OFMT,FS變量的值
set_fs()
get_rs()
set_rs()
之類也是用於變量的值。
接着是一對內部函數
do_exp()
  計算指數的函數,底是自然常數。
do_getline()
  得到一行,這個與inrec()結合沒看懂。
do_index()
  像index("abc","bc")中用於字符串查找。返回的索引值從1開始。
do_int()
  取整函數
do_length()
  計算字符串的長度
do_log()
  計算某數以自然常數爲底的指數。和do_exp()是一對逆函數。
do_printf()
  沒看懂
do_split()
  把字符串拆到數組中。如split("a/b/c",arr,"/")結果
  a[1]="a",a[2]="b",a[3]="c"
  實現拆分的過程非常麻煩。看了若干遍,纔看懂
do_sprintf()
  這個函數徹底沒看懂。我有些怕它,因爲我沒有要看懂的勇氣。
  象do_split()函數我有勇氣看,這個等有機會再看。
do_sqrt()
  計算平方根
do_substr()
  求字串的子串,如substr("12345",2,3)結果爲"234"
get_one()
get_two()
get_three()
這三個函數類似,都是解析樹中得到相應的元素。都是從lnode中獲取值。
inrec()
  這個函數在awk1.c中也有調用。是從文件中讀入一行,並拆分到字段變量$0,$1,$2...中去,並設置NF,NR的值。
  具體實現過程很長,選主幹說說。
  取到記錄分隔符RS和字段分隔符FS
  從文件中讀取一行(以RS爲準)
  把讀到的行內容記入字符串cur中。
  把整行的內容寫入變量$0中。
  NF=0
  NR+=1
  對cur中的每個字符進行循環處理
    如果FS=' ',就略過開頭的連續空格和tab串
    tcnt=0用於記錄找到的字段的長度
    ttmp用於記錄找到的字段的內容
    以FS爲準確,找到字段內容,記入ttmp中,長度寫入tcnt中。
    把字段內容寫入++NF中。也即$1,$2等
  對NF進行賦值處理
print_simple()
  對打印函數有些怕,下次不怕時,再看。
 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章