This is an old revision of the document!


Grammar

This is the formal definition of XC=BASIC's grammar.

NumericLiteral:

- $ % [0-9] [A-F] d . [0-9] E [0-9]

::= '-'? ( '$' | '%' )? [0-9A-F]+ 'd'? ( '.' [0-9]+ )? ( 'E' [0-9]+ )?

referenced by:


CharLiteral:

' . '

::= "'" . "'"

referenced by:


Number:

CharLiteral NumericLiteral

referenced by:


StringLiteral:

" [^"] "

::= '"' [^"]* '"'

referenced by:


Identifier:

[a-z] [A-Z] _ [a-z] [A-Z] [0-9] _ $

::= [a-zA-Z_] [a-zA-Z0-9_]* '$'?

referenced by:


Factor:

StringLiteral - NOT Number - NOT Parenthesis - NOT Address - NOT Expression

| ( '-' | 'NOT' )? Number
| ( '-' | 'NOT' )? Parenthesis
| ( '-' | 'NOT' )? Address
| ( '-' | 'NOT' )? Expression

referenced by:


Term:

Factor * / MOD

Term ::= Factor ( ( '*' | '/' | 'MOD' ) Factor )*

referenced by:


Simplexp:

Term + -

Simplexp ::= Term ( ( '+' | '-' ) Term )*

referenced by:


Relation:

Simplexp < <= = <> > >=

Relation ::= Simplexp ( ( '<' | '<=' | '=' | '<>' | '>' | '>=' ) Simplexp )*

referenced by:


Expression:

Relation AND OR XOR

::= Relation ( ( 'AND' | 'OR' | 'XOR' ) Relation )*

referenced by:


Parenthesis:

( Expression )

::= '(' Expression ')'

referenced by:


Subscript:

( Expression , Expression )

::= '(' Expression? ( ',' Expression )* ')'

referenced by:


Accessor:

Identifier Subscript . Identifier Subscript

referenced by:


Address:

@ Accessor

referenced by:


LabelReference:

[a-z] [A-Z] _ [a-z] [A-Z] _ [0-9]

::= [a-zA-Z_] [a-zA-Z_0-9]*

referenced by:


Label:

LabelReference :

referenced by:


_CALL:

CALL Accessor

_CALL ::= 'CALL' Accessor

referenced by:


_CONST:

SHARED CONST Variable = Number

_CONST ::= 'SHARED'? 'CONST' Variable '=' Number

referenced by:


_CONTINUE:

CONTINUE DO FOR

::= 'CONTINUE' ( 'DO' | 'FOR' )?

referenced by:


_DATA:

SHARED DATA AS Identifier Number StringLiteral ,

_DATA ::= 'SHARED'? 'DATA AS' Identifier ( Number | StringLiteral ) ( ',' ( Number | StringLiteral ) )*

referenced by:


_DECLARATION:

DECLARE _FUNCTION _SUB

::= 'DECLARE' ( _FUNCTION | _SUB )

referenced by:


_DIM:

DIM STATIC FAST SHARED Identifier AS Identifier @ Number LabelReference FAST SHARED

_DIM ::= ( 'DIM' | 'STATIC' ) ( 'FAST' | 'SHARED' )* Identifier 'AS' Identifier ( '@' ( Number | LabelReference ) )? ( 'FAST' | 'SHARED' )*

referenced by:


_DO:

DO WHILE UNTIL Expression

_DO ::= 'DO' ( ( 'WHILE' | 'UNTIL' ) Expression )?

referenced by:


_LET:

LET Accessor = Expression

_LET ::= 'LET'? Accessor '=' Expression

referenced by:


_END:

END ASM IF FUNCTION SUB TYPE

_END ::= 'END' ( 'ASM' | 'IF' | 'FUNCTION' | 'SUB' | 'TYPE' )?

referenced by:


_EXIT:

EXIT DO FOR

_EXIT ::= 'EXIT' ( 'DO' | 'FOR' )

referenced by:


_ERROR:

ERROR Expression

_ERROR ::= 'ERROR' Expression

referenced by:


_FIELD:

Identifier AS Identifier

referenced by:


_FOR:

FOR Identifier AS Identifier = Expression TO Expression STEP Expression

_FOR ::= 'FOR' Identifier ( 'AS' Identifier )? '=' Expression 'TO' Expression ( 'STEP' Expression )?

referenced by:


_FUNCTION:

FUNCTION Identifier AS Identifier ( Identifier AS Identifier , ) PRIVATE SHARED STATIC OVERLOAD INLINE

::= 'FUNCTION' Identifier AS Identifier '(' ( Identifier AS Identifier ( ',' Identifier AS Identifier )* )? ')' ( 'PRIVATE' | 'SHARED' | 'STATIC' | 'OVERLOAD' | 'INLINE' )*

referenced by:


_GENERIC:

CHARAT CLOSE LOAD LOCATE MEMCPY MEMSET MEMSHIFT OPEN POKE RANDOMIZE SAVE SCREEN TEXTAT WAIT Expression ,

_GENERIC ::= ( 'CHARAT' | 'CLOSE' | 'LOAD' | 'LOCATE' | 'MEMCPY' | 'MEMSET' | 'MEMSHIFT' | 'OPEN' | 'POKE' | 'RANDOMIZE' | 'SAVE' | 'SCREEN' | 'TEXTAT' | 'WAIT' ) Expression ( ',' Expression )*

referenced by:


_GET:

GET # Expression , Accessor

_GET ::= 'GET' '#' Expression ',' Accessor

referenced by:


_GOTO:

GOTO LabelReference

referenced by:


_GOSUB:

GOSUB LabelReference

referenced by:


_IF:

IF Expression THEN Statement ELSE Statement

_IF ::= 'IF' Expression 'THEN' ( Statement+ ( 'ELSE' Statement+ )? )?

referenced by:


_INCBIN:

INCBIN StringLiteral

_INCBIN ::= 'INCBIN' StringLiteral

referenced by:


_INCLUDE:

INCLUDE StringLiteral

_INCLUDE ::= 'INCLUDE' StringLiteral

referenced by:


_INPUT:

INPUT # Expression , StringLiteral , Accessor , ;

_INPUT ::= 'INPUT' ( '#' Expression ',' | StringLiteral ',' )? Accessor ( ',' Accessor )* ';'?

referenced by:


_LOOP:

LOOP WHILE UNTIL Expression

_LOOP ::= 'LOOP' ( ( 'WHILE' | 'UNTIL' ) Expression )?

referenced by:


_NEXT:

NEXT Identifier

_NEXT ::= 'NEXT' Identifier?

referenced by:


_ON:

ON Expression ERROR GOTO GOSUB LabelReference ,

_ON ::= 'ON' ( Expression | 'ERROR' ) ( 'GOTO' | 'GOSUB' ) LabelReference ( ',' LabelReference )*

referenced by:


_ORIGIN:

ORIGIN Number

_ORIGIN ::= 'ORIGIN' Number

referenced by:


_PRINT:

PRINT # Expression , Expression , ; Expression ;

_PRINT ::= 'PRINT' ( '#' Expression ',' )? Expression ( ',' | ';' Expression )* ';'?

referenced by:


_READ:

READ # Expression , Accessor

_READ ::= 'READ' '#' Expression ( ',' Accessor )+

referenced by:


_REM:

' REM [^EOL]

_REM ::= ( "'" | 'REM' ) [^EOL]*

referenced by:


_RETURN:

RETURN Expression

_RETURN ::= 'RETURN' Expression?

referenced by:


_SUB:

SUB Identifier ( Identifier AS Identifier , ) PRIVATE SHARED STATIC OVERLOAD INLINE

_SUB ::= 'SUB' Identifier '(' ( Identifier AS Identifier ( ',' Identifier AS Identifier )* )? ')' ( 'PRIVATE' | 'SHARED' | 'STATIC' | 'OVERLOAD' | 'INLINE' )*

referenced by:


_SWAP:

SWAP Expression , Expression

_SWAP ::= 'SWAP' Expression ',' Expression

referenced by:


_SYS:

SYS Expression FAST

_SYS ::= 'SYS' Expression 'FAST'?

referenced by:


_TYPE:

TYPE Identifier

_TYPE ::= 'TYPE' Identifier

referenced by:


_WRITE:

WRITE # Expression , Expression

_WRITE ::= 'WRITE' '#' Expression ',' Expression

referenced by:


Statement:

ASM _CALL _CONST _CONTINUE _DATA _DECLARATION _DIM _DO _LET _END _EXIT _ERROR ELSE _FIELD _FOR _FUNCTION _GENERIC _GET _GOTO _GOSUB _INCBIN _INCLUDE _IF _INPUT _LOOP _NEXT _ON _ORIGIN _PRINT _READ _REM _RETURN _SUB _SWAP _SYS _TYPE _WRITE

referenced by:


Line:

Label Statement

referenced by:


Program:

Line EOF

no references



... generated by RR - Railroad Diagram Generator R R