Tokenizer Part
getsym() tokenizer
alpha(skipspc())) alphabet
digit() digit
getch() get one char
gsearch() global name table search
lsearch() local name table search
escape() \033, \n など
getstring() "aaaa"
postequ() += などの処理
getch()
getline() get one line
getline()
macroeq() Macro expansion
mc-parse.c.html#define
Parser Part
main() メインルーチン
init() initialize 表等の初期化
decl() declare 宣言
typespec() 型の宣言 int
decl0() declare 宣言の本体 a[0],a;
fdecl() function 関数の宣言 int a() {
decl() local ローカル変数の宣言 int b;
statement() statement 文 b = 1;
def() 宣言されたオブジェクトの処理
typespec() type 型
sdelc() struct 構造体 struct
decl() struct 構造体の中の宣言
decl0() * のついた宣言 (pointer)
decl1()
dec1() array 配列、variable name 変数名の定義
decl0() nested type 入れ子になった型
cexpr(expr()) size of array 配列の大きさ
adecl() argument 引き数の宣言
def()
fcheck() 既に宣言されているか?
expr1() variable initilize 変数の初期化のための式の評価
文
statement() statement のコンパイル、以下、Cの基本構文
doif() dowhile() dodo() dofor() doswitch()
docomp() docase() dodefault() doreturn() dogoto() dolabel()
bexpr() branch expression if(a) など
gexpr(expr()) expression 普通の式、gexpr はコード生成
expr() expression 式、これは木を返す
rvalue(expr0()) のrvalue (right value)
expr0() , で、つながった式
expr1()
expr1() =, +=, <<= など
expr2()
expr2() a?b:c 3項演算子
expr3()
expr3() ||
expr4()
expr4() &&
expr5()
expr5() |
expr6()
expr6() ^
expr7()
expr7() &
expr8()
expr8() ==, !=
expr9()
expr9() <,>,<=,>=
expr10()
expr10() <<,>>
expr11()
expr11() +,-
expr12()
expr12() *,%,/
expr13()
expr13() ++,--,*p,|,-,~,!
expr16()
typename() sizeof, (int)a
expr14()
expr14() variable,"aaa",1234,
expr15()
expr13()
expr0() ()
expr16()
expr16() array[]
expr15()
strop() a.b, a->b
ndecl0()
expr15() function(a,b,c)
typename()
typespec() (int *)
ndecl0()
ndecl0() * の処理
ndecl1()
ndecl1() arrary[],function()
cexpr(expr())
bexpr() branch
rexpr() >,<,!= 条件分岐のための式
gexpr()
gexpr() コード生成 (この以下は、省略)
gexpr()