aboutsummaryrefslogtreecommitdiffhomepage
path: root/libslang/doc/grammar.txt
diff options
context:
space:
mode:
Diffstat (limited to 'libslang/doc/grammar.txt')
-rw-r--r--libslang/doc/grammar.txt131
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
+