直譯器構造文法簡述

鴨脖發表於2012-12-22

本文法是在CMM文法的基礎上做了函式呼叫,邏輯運算以及陣列運算,以及struct的定義,類的定義

首先說明一下樹節點所應該包含的資訊,分別包含了:
節點的型別,當前token的所有資訊,int值,real值,陣列維數,最重要的是孩子節點指標,這裡用一個連結串列表示所有的孩子。你也可以加上行號,以及其他的資訊。


入口是start_STMT.從這個根節點下,它的孩子是class定義的節點和struct定義的節點。(^ is null)
START_STMT------->CLASS_STMT | STRUCT_STMT
CLASS_STMT------->class { CLASS_BODY_SEQ }
CLASS_BODY_SEQ------->CLASS_BODY_SEQ CLASS_BODY_STMT | ^
CLASS_BODY_STMT------->FUNC_STMT | DEC_STMT


STRUCT_STMT------->struct { STRUCT_BODY }
STRUCT_BODY------->STRUCT_BODY DEC_STMT | DEC_STMT


FUNC_STMT------->FUNC_TYPE ID ( PARA_STMT_SEQ ) { STMT_SEQ }
FUNC_TYPE------->void | int | real | bool
ID------->[a-zA-Z$_]+(a-zA-Z$_0-9)*
PARA_STMT_SEQ------->PARA_STMT_SEQ [,PARA_DEC] | PARA_DEC
PARA_DEC------->TYPE DIMEN_DESC ID
TYPE------->int | real | bool
DIMEN_DESC------->DIMEN_DESC [] | []


STMT_SEQ------->{ STMT_SEQ_BODY }
STMT_SEQ_BODY------->STMT_SEQ_BODY | STMT
STMT------->DEC_STMT | IF_STMT | WHILE_STMT | READ_STMT | WRITE_STMT | RETURN_STMT | CALL_STMT | ASSIGN_STMT | SELF_STMT


DEC_STMT------->TYPE ID DEC_STMT_SUB;
DEC_STMT_SUB------->[=EXP] | DIMEN_SEQ
DIMEN_SEQ------->DIMEN_SEQ[AEXP] | [AEXP]


IF_STMT------->IF( EXP ) STMT_PART [ELSE STMT_PART];
STMT_PART------->STMT | STMT_SEQ


WHILE_STMT------->WHILE (EXP) STMT_SEQ;


READ_STMT------->READ ID [DIMEN_SEQ];


WRITE_STMT------->WRITE EXP;


RETURN_STMT------->RETURN EXP;


CALL_STMT------->ID ( PARA_CALL_SEQ );
PARA_CALL_SEQ------->PARA_CALL_SEQ [,EXP] | EXP


ASSIGN_STMT------->ID [DIMEN_SEQ] = EXP;


SELF_STMT------->SELFOP ID[DIMEN_SEQ] | ID[DIMEN_SEQ] SELFOP;
SELFOP------->++ | --


EXP------->OR
OR------->AND[|| OR]
AND------->NOT [|| AND]
NOT------->^NOT | EQEXP | CONSTBOOL
EQEXP------->AEXP EOP AEXP
EOP------->< | <= | > | >= | == | !=
AEXP------->TEXP AOP TEXP
AOP------->+ | -
TEXP------->UNAEXP TOP UNAEXP
TOP------->* | / | %
UNAEXP------->[POP] ELEMENT | ELEMENT [SELFOP]
POP------->SELFOP | -
ELEMENT------->CONST | ID2 | ( EXP )

ID2------->ID [DIMEN_SEQ] | ID (PARA_CALL_SEQ)


以上便是涉及到的所有文法。實現採用自頂向下分析方法。



















相關文章