diff options
Diffstat (limited to 'libslang/doc/grammar.txt')
-rw-r--r-- | libslang/doc/grammar.txt | 131 |
1 files changed, 131 insertions, 0 deletions
diff --git a/libslang/doc/grammar.txt b/libslang/doc/grammar.txt new file mode 100644 index 0000000..0c69b37 --- /dev/null +++ b/libslang/doc/grammar.txt @@ -0,0 +1,131 @@ +This grammar was derived from slparse.c + +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 + |