Customizing DDX/DDV

By Jean-Denis Bertron

Dr. Dobb's Journal May 1998

macro	: 	expr EOI;
expr	: 	stmt Zexpr;
Zexpr	: 	EMPTY |
		'+' expr | 
		'-' expr | 
		OR expr |
		XOR expr ;
stmt		:	term Zstmt;
Zstmt	:	EMPTY |
		'*' term | 
		'/' term |
		'%' term |
		AND term ;
term		: number |
		'(' expr ')'  |
		LOG '(' expr ')'  |
		LN '(' expr ')'  |
		LG '('  expr ')'  |
		EXP '(' expr ')'  |
		ABS '(' expr ')'  |
		SIN '(' expr ')'  |
		COS '(' expr ')'  |
		TAN '(' expr ')'  |
		ASIN '(' expr ')'  |
		ACOS '(' expr ')'  |
		ATAN '(' expr ')'  |
		NOT '(' expr ')'  |
		DIV '(' expr ',' expr ')' |
		CNP '(' expr ',' expr ')' |
		POW '(' expr ',' expr ')' |
		ANP '(' expr ',' expr ')' ;
number	:	HEXVAL |
		afloat |
		'+' afloat |
		'-' afloat |
		NAME ;
afloat	: INTEGER decimal exponent ;
decimal	: 	EMPTY | '.' INTEGER ;
exponent	: 	EMPTY | 
		'E' Eexp;
Eexp		: 	INTEGER |
		'-' INTEGER |
		'+' INTEGER ;	

Example 1: Grammar used to provide basic mathematical operators.

Back to Article


Copyright © 1998, Dr. Dobb's Journal