File: grammar.txt

package info (click to toggle)
slang2 2.3.3-5
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie, trixie-proposed-updates
  • size: 11,488 kB
  • sloc: ansic: 101,756; sh: 3,435; makefile: 1,046; pascal: 440
file content (125 lines) | stat: -rw-r--r-- 2,784 bytes parent folder | download | duplicates (7)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
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