构造使用类C语言的脚本引擎(4)语法分析

本文介绍如何构建一个使用类C语言的脚本引擎,通过BNF描述语法规则,并利用yacc生成分析表。内容涵盖PROG、表达式、控制流结构的定义,以及分析表和规约函数的生成过程。
摘要由CSDN通过智能技术生成

构造使用类C语言的脚本引擎(4)

作者 :kevin_qing

转贴请注明

同上一章一样,语法分析部分也不准备使用yacc直接生成代码,而是只使用yacc的生成的分析表。

BNF:

%token ID IF ELSE SWITCH GOTO RETURN NUMBER STRING MAIN
%token ADD_OP MUL_OP ASSIGN_OP CMP_OP LOGIC_OP1 LOGIC_OP2
%token LPAREN RPAREN LBRACE RBRACE COLON COMMA SEMI

%%
PROG
 : MAIN LPAREN RPAREN CPD_SMT
 ;

CPD_SMT
 : LBRACE SMT_SEQ RBRACE
 ;

SMT_SEQ
 : LB_SMT
 | SMT_SEQ LB_SMT
 ;

LABLE : ID COLON
 ;

LB_SMT
 : SMT
 | LABLE SMT
 ;
SMT
 : EXPR SEMI
 | SEMI
 | GOTO ID SEMI
 | RETURN SEMI
 | IF LPAREN EXPR RPAREN SMT
 | IF LPAREN EXPR RPAREN SMT ELSE SMT
 | SWITCH LPAREN EXPR RPAREN LBRACE CASES RBRACE
 | CPD_SMT
 ;

CASE : NUMBERS COLON SMT
 ;

CASES : CASE
 | CASES CASE
 ;

NUMBERS : ADD_OP NUMBER
 | NUMBER
 ;

STRINGS : STRING
 | STRINGS STRING
 ;

PAM_LIST
 : EXPR
 | PAM_LIST COMMA EXPR
 ;

PRI_EXPR
 : ID
 | NUMBERS
 | STRINGS
 | LPAREN EXPR RPAREN
 ;
POST_EXPR
 : PRI_EXPR
 | ID LPAREN RPAREN
 | ID LPAREN PAM_LIST RPAREN
 ;
 
MUL_EXPR
 : POST_EXPR
 | MUL_EXPR MUL_OP POST_EXPR
 ;

ADD_EXPR
 : MUL_EXPR
 | ADD_EXPR ADD_OP MUL_EXPR
 ;

CMP_EXPR
 : ADD_EXPR
 | ADD_EXPR CMP_OP ADD_EXPR
 ;

LOGIC_EXPR
 : CMP

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值