Liqun Wu / Mbed 2 deprecated 90418_mbed_controller

Dependencies:   mbed

libscpi/src/scpi.g

Committer:
wuliqunyy
Date:
2022-01-17
Revision:
0:be95bfb06686

File content as of revision 0:be95bfb06686:

grammar scpi;

terminatedProgramMessage 
	:	programMessage NL? EOF
	;
	
programMessage
	:	programMessageUnit (SEMICOLON programMessageUnit)*
	;
	
	
programMessageUnit 
	:	WS* programHeader (WS programData (COMMA programData)*)?
	;

programHeader
	:	compoundProgramHeader
	|	commonProgramHeader
	;

compoundProgramHeader
	:	COLON? PROGRAM_MNEMONIC (COLON PROGRAM_MNEMONIC)* QUESTION?
	;
	
commonProgramHeader 
	:	STAR PROGRAM_MNEMONIC QUESTION?
	;
	
programDataSeparator 
	:	  WS*
	;

programData
	:	WS* programDataType WS*
	;
	
programDataType
	:	nondecimalNumericProgramData
	|	characterProgramData
	|	decimalNumericProgramData
	|	stringProgramData
	|	arbitraryBlockProgramData
	|	expressionProgramData
//	|	suffixProgramData
	;

nondecimalNumericProgramData
	:	HEXNUM
	|	OCTNUM
	|	BINNUM
	;
	
characterProgramData
	:	PROGRAM_MNEMONIC
	;

decimalNumericProgramData
	:	DECIMAL_NUMERIC_PROGRAM_DATA_WITH_SUFFIX
	;
	
//suffixProgramData
//	:	PROGRAM_MNEMONIC//SUFFIX_PROGRAM_DATA
//	;
	
stringProgramData
	:	SINGLE_QUOTE_PROGRAM_DATA
	|	DOUBLE_QUOTE_PROGRAM_DATA
	;	

expressionProgramData
	: 	PROGRAM_EXPRESSION
	;

// support only nonzero prefix
arbitraryBlockProgramData
	:	SHARP NONZERO_DIGIT NUMBER .*
	;
		
PROGRAM_MNEMONIC	: 	ALPHA (ALPHA | DIGIT | UNDERSCORE)*;
HEXNUM			:	SHARP H HEXDIGIT*;
BINNUM			:	SHARP Q OCTDIGIT*;
OCTNUM			:	SHARP B BINDIGIT*;
UNDERSCORE		:	'_';
SEMICOLON 		:	';';
QUESTION		:	'?';
COLON	 		:	':';
COMMA			:	',';
STAR			:	'*';
NL			:	'\r'? '\n' ;
WS  			:   	(SPACE | TAB);

DECIMAL_NUMERIC_PROGRAM_DATA_WITH_SUFFIX	:	DECIMAL_NUMERIC_PROGRAM_DATA WS* (SUFFIX_PROGRAM_DATA)?;
fragment DECIMAL_NUMERIC_PROGRAM_DATA	:	MANTISA WS* (EXPONENT)?;
SINGLE_QUOTE_PROGRAM_DATA	:	SINGLE_QUOTE ( (NON_SINGLE_QUOTE) | (SINGLE_QUOTE SINGLE_QUOTE))* SINGLE_QUOTE;
DOUBLE_QUOTE_PROGRAM_DATA	:	DOUBLE_QUOTE ( (NON_DOUBLE_QUOTE) | (DOUBLE_QUOTE DOUBLE_QUOTE))* DOUBLE_QUOTE;
//SUFFIX_PROGRAM_DATA	:	SLASH? (ALPHA+ (MINUS? DIGIT)?) ((SLASH | DOT) (ALPHA+ (MINUS? DIGIT)?))*;	
fragment SUFFIX_PROGRAM_DATA	:	SLASH? ALPHA+ ((SLASH | DOT) ALPHA+)*;	
//fragment SUFFIX_PROGRAM_DATA	:	ALPHA+;	

fragment PROGRAM_EXPRESSION_CHARACTER	: 	(SPACE | '!' | '$'..'&' | '*'..':' | '<' ..'~');
PROGRAM_EXPRESSION	:	LBRACKET PROGRAM_EXPRESSION_CHARACTER RBRACKET;
	
fragment PLUSMN		:	(PLUS | MINUS);
fragment MANTISA	:	PLUSMN? ( (NUMBER) | (NUMBER DOT NUMBER?) | (DOT NUMBER));
	
//fragment EXPONENT	:	WS* E WS* PLUSMN? NUMBER;
fragment EXPONENT	:	E WS* PLUSMN? NUMBER;

fragment NUMBER		:	DIGIT+;

fragment LBRACKET		:	'(';
fragment RBRACKET		:	')';

fragment ALPHA		:	('a'..'z'|'A'..'Z');
fragment DIGIT		:	('0'..'9');
fragment NONZERO_DIGIT	:	('1'..'9');

fragment HEXDIGIT	:	(DIGIT | 'a'..'f' | 'A'..'F');
fragment OCTDIGIT	:	('0'..'7');
fragment BINDIGIT	:	('0' | '1');

fragment SHARP			:	'#';

fragment E		:	('E'|'e');
fragment H		:	('H'|'h');
fragment Q		:	('Q'|'q');
fragment B		:	('B'|'b');

fragment SPACE		:	' ';
fragment TAB		:	'\t';

fragment PLUS		:	'+';
fragment MINUS		:	'-';
fragment DOT		:	'.';
fragment SLASH		:	'/';
fragment SINGLE_QUOTE	:	'\'';
fragment DOUBLE_QUOTE	:	'"';
fragment NON_SINGLE_QUOTE 	:	~SINGLE_QUOTE;
fragment NON_DOUBLE_QUOTE 	:	~DOUBLE_QUOTE;