126 строки
2.7 KiB
Plaintext
126 строки
2.7 KiB
Plaintext
|
This grammar was derived from slparse.c --- it is out-dated.
|
||
|
|
||
|
statement:
|
||
|
compound-statement
|
||
|
if ( expression ) statement
|
||
|
if ( expression ) statement else statement
|
||
|
!if ( expression ) statement
|
||
|
loop ( expression ) statement
|
||
|
_for ( expression ) statement
|
||
|
while ( expression ) statement
|
||
|
do statement while (expression) ;
|
||
|
for ( expressionopt ; expressionopt ; expressionopt ) statement
|
||
|
ERROR_BLOCK statement
|
||
|
EXIT_BLOCK statement
|
||
|
USER_BLOCK0 statement
|
||
|
USER_BLOCK1 statement
|
||
|
USER_BLOCK2 statement
|
||
|
USER_BLOCK3 statement
|
||
|
USER_BLOCK4 statement
|
||
|
forever statement
|
||
|
break ;
|
||
|
continue ;
|
||
|
return expressionopt ;
|
||
|
variable variable-list ;
|
||
|
struct struct-decl ;
|
||
|
define identifier function-args ;
|
||
|
define identifier function-args compound-statement
|
||
|
switch ( expression ) statement
|
||
|
rpn-line
|
||
|
at-line
|
||
|
push ( expression )
|
||
|
( expression ) = expression ;
|
||
|
expression ;
|
||
|
expression :
|
||
|
|
||
|
statement-list:
|
||
|
statement
|
||
|
statement-list statement
|
||
|
|
||
|
compound-statement:
|
||
|
{ statement-list }
|
||
|
|
||
|
variable-list:
|
||
|
variable-decl
|
||
|
variable-decl variable-list
|
||
|
|
||
|
variable-decl:
|
||
|
identifier
|
||
|
identifier = simple-expression
|
||
|
|
||
|
struct-declaration:
|
||
|
struct { struct-field-list };
|
||
|
|
||
|
struct-field-list:
|
||
|
struct-field-name , struct-field-list
|
||
|
struct-field-name
|
||
|
|
||
|
struct-declaration:
|
||
|
typedef struct { struct-field-list } Type_Name;
|
||
|
|
||
|
struct-field-list:
|
||
|
struct-field-name , struct-field-list
|
||
|
struct-field-name
|
||
|
|
||
|
function-args:
|
||
|
( args-dec-opt )
|
||
|
|
||
|
args-decl-opt:
|
||
|
identifier
|
||
|
args-decl , identifier
|
||
|
|
||
|
expression:
|
||
|
simple_expression
|
||
|
simple-expression , expression
|
||
|
<none>
|
||
|
|
||
|
% Note: simple-expression groups operators OP1 at same level. The
|
||
|
% actual implementation will not do this.
|
||
|
simple-expression:
|
||
|
unary-expression
|
||
|
binary-expression BINARY-OP unary-expression
|
||
|
andelse xxelse-expression-list
|
||
|
orelse xxelse-expression-list
|
||
|
|
||
|
xxelse-expression-list:
|
||
|
{ expression }
|
||
|
xxelse-expression-list { expression }
|
||
|
binary-expression:
|
||
|
unary-expression
|
||
|
unary-expression BINARY-OP binary-expression
|
||
|
|
||
|
unary-expression:
|
||
|
postfix-expression
|
||
|
++ postfix-expression
|
||
|
-- postfix-expression
|
||
|
case unary-expression
|
||
|
OP3 unary-expression
|
||
|
(OP3: + - ~ & not @)
|
||
|
|
||
|
postfix-expression:
|
||
|
primary-expression
|
||
|
postfix-expression [ expression ]
|
||
|
postfix-expression ( function-args-expression )
|
||
|
postfix-expression . identifier
|
||
|
postfix-expression ^ unary-expression
|
||
|
postfix-expression ++
|
||
|
postfix-expression --
|
||
|
postfix-expression = simple-expression
|
||
|
postfix-expression += simple-expression
|
||
|
postfix-expression -= simple-expression
|
||
|
|
||
|
primary-expression:
|
||
|
literal
|
||
|
identifier
|
||
|
( expression_opt )
|
||
|
[ inline-array-expression ]
|
||
|
&identifier
|
||
|
struct-definition
|
||
|
__tmp(literal)
|
||
|
|
||
|
inline-array-expression:
|
||
|
expression
|
||
|
expression : expression
|
||
|
expression : expression : expression
|
||
|
|