Javascript文法之var声明

经过几个小时的努力,文法文件貌似终于工作正常了。文法定义的是一个js变量声明语句的文法,以此来学习文法的定义和使用。

测试输入:

var s=123;
var s="sadasd";
var s=(1);
var s=1+3*5;
var s=1+3+5;
var s=s.p;
var s=s[1];
var s=s==s;
var s=!s;
var p=p.point();
var p=p.point()-1;
var a=new Array();
var a=ss=s=d;
var regex=/avc/;
var a=ss=s;
var a=ss.x=s;

 这些输入均测试通过。

文法如下:

stmtList:
	| stmtList varDecl
;
varDecl:
	VAR ID EQ expression EXPR_END {$$=$4;printf("$$ is %d, id is %s\n", $$,$2);}
;
expression:
	assignmentExpression
	| logicalOrExpression
	| REGEX
;
assignmentExpression:
	variableAccess EQ expression
;
logicalOrExpression:
	logicalAndExpression logicalOrExpressionRight
;
logicalOrExpressionRight:
	OR logicalAndExpression
	|
;
logicalAndExpression:
	relationalExpression logicalAndExpressionRight
;
logicalAndExpressionRight:
	AND relationalExpression logicalAndExpressionRight
	|
;
relationalExpression:
	additiveExpression relationalExpressionRight
	| NOT relationalExpression
;
relationalExpressionRight:
	relationalOperator additiveExpression
	|
;
additiveExpression:
	multiplicativeExpression additiveExpressionRight
;
additiveExpressionRight:
	additiveOperator multiplicativeExpression additiveExpressionRight
	|
;
multiplicativeExpression:
	primaryExpression multiplicativeExpressionRight
;
multiplicativeExpressionRight:
	multiplicativeOperator primaryExpression multiplicativeExpressionRight
	|
;
primaryExpression:
	variableAccess
	| NUM
	| STRING
	| LPAREN expression RPAREN
	| SUB primaryExpression
	| functionCallExpression
	| newObjectExpression
;
functionCallExpression:
	variableAccess LPAREN paramsExpression RPAREN
;
paramsExpression:
	logicalOrExpression paramsExpressionRight
	|
;
paramsExpressionRight:
	COMMA paramsExpression
	|
;
newObjectExpression:
	NEW functionCallExpression
;
variableAccess:
	ID
	| ID POINT ID
	| ID LBRACK expression RBRACK
;
relationalOperator:
	LT | GT | EQEQ | LE | GE | NE | EQEQEQ | NEE
; 
additiveOperator:
	PLUS | SUB
;
multiplicativeOperator:
	MUL | DIV
;  

 文法中参考了rednaxelafx在《一个简单的语言的语法(一):用ANTLR描述语法 》中的一些文法修改得到

 

还差描述var a=function(){}的文法,由于时间关系就先不写了。明天补全。。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值