解譯器構造文法簡述

來源:互聯網
上載者:User

本文法是在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)

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

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.