1/*description:
2{
3	Here is the complete grammar of the CodeWorker's scripting language.
4
5	It is expressed in the extended-BNF dialect of CodeWorker, so has the
6	advantage of running under \CodeWorker\ for scanning scripts, and has the
7	original feature to be auto-descriptive.
8}
9*/
10
11/* "CodeWorker":	a scripting language for parsing and generating text.
12
13Copyright (C) 1996-1997, 1999-2003 C�dric Lemaire
14
15This library is free software; you can redistribute it and/or
16modify it under the terms of the GNU Lesser General Public
17License as published by the Free Software Foundation; either
18version 2.1 of the License, or (at your option) any later version.
19
20This library is distributed in the hope that it will be useful,
21but WITHOUT ANY WARRANTY; without even the implied warranty of
22MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
23Lesser General Public License for more details.
24
25You should have received a copy of the GNU Lesser General Public
26License along with this library; if not, write to the Free Software
27Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
28
29To contact the author: codeworker@free.fr
30*/
31
32// Defines how to ignore insignificant characters between tokens.
33#ignore	::= [' ' | '\t' | '\r' | '\n' | "/*" ignoreEmbeddedComment | "//"->'\n']*;
34
35// The first production rule is the head of the grammar.
36// The context variable pointed to by 'this' holds information about the
37// type of the script to scan:
38//   - "procedural": the backbone of the scripting language,
39//   - "extended-BNF": includes also translation scripts,
40//   - "template-based": the server-page notation for generation patterns,
41// If the type is unknown, an empty string must be passed to the context
42// variable.
43translation_unit	::= script<this>;
44
45// The type of the script is unknown: the production rule tries the 3
46// types.
47// This rule is the less declarative. It specifies the current script's type
48// for scanning and catches syntax errors for looking at alternatives.
49// Note the possible use of a C++-template syntax for non-terminal symbols.
50script<"">	::=
51		#try
52			// '=>' is an escape mode to execute a procedural instruction
53			// or block.
54			=> set this = "procedural";
55			script<"procedural">
56		// We don't want to stop on error if the script wasn't recognized
57		// as a common one.
58		#catch(sError1)
59	|
60		#try
61			=> set this = "extended-BNF";
62			script<"extended-BNF">
63		#catch(sError2)
64	|
65		#try
66			=> set this = "template-based";
67			script<"template-based">
68		#catch(sError3)
69	|
70		// If none of the 3 types, the error for each of them is raised.
71		=> set this = "";
72		=> error("Not recognized as a 'CodeWorker' script:\n" +
73				 "  - procedural script:\n" + sError1 +
74				 "  - extended-BNF script:\n" + sError2 +
75				 "  - template-based script:\n" + sError3);
76	;
77
78// The non terminal 'script<"procedural">' scans a common script, such as a
79// leader script: not BNF and not template-based.
80// An error is raised if a syntax error is encountered (use of '#continue').
81script<"procedural">	::=
82		#ignore // ignore blanks and C++ comments between symbols
83		#continue // the rest of the sequence must be valid (or the scanner raises a syntax error)
84		[instruction]+
85		#empty // end of file expected; because of '#continue', a syntax error is raised if not reached
86		;
87
88// The well-named non terminal script<"extended-BNF"> scans an extended-BNF script.
89// It expects a set of:
90//   - BNF directives (case sensitive or not, ...),
91//   - functions declaration/definition,
92//   - production rules.
93// An error is raised if a syntax error is encountered (use of '#continue').
94script<"extended-BNF">	::=
95		#ignore
96		#continue
97		[
98				BNF_general_directive
99			|
100				// '#readIdentifier' is a predefined non terminal that scans
101				// a C-like identifier.
102				// - A:{"s1", ..., "sN"} means that the token must be worth
103				//   a constant string of the set,
104				// - A:var means that the token value is assigned to the
105				//   variable 'var'. If the variable doesn't exist yet, it is
106				//   declared in the local scope,
107				// - A:{"s1", ..., "sN"}:var means that the token must belong
108				//   to the set and that the value is assigned to the variable.
109				#readIdentifier:{"function", "declare", "external"}:sKeyword
110				#continue
111				instruction<sKeyword>
112			|
113				production_rule
114		]+
115		#empty;
116
117// The non terminal script<"template-based"> scans a template-based script.
118// Procedural instructions or expressions are embedded between @ symbols
119// or between <% and %>.
120// An error is raised if a syntax error is encountered (use of '#continue').
121script<"template-based">	::=
122		#continue
123		[
124			->['@' | "<%"]
125			#continue
126			#ignore
127			[
128					expression
129					['@' | "%>" | #empty]
130				|
131					[instruction]*
132					['@' | "%>" | #empty]
133			]
134		]+;
135
136
137// Called by '#ignore'.
138ignoreEmbeddedComment	::= ->["*/" | "/*" ignoreEmbeddedComment | "//"->'\n' ignoreEmbeddedComment];
139
140//-------------------------------------------------------------
141//                          The expressions
142//-------------------------------------------------------------
143
144// A default expression (non arithmetic) that manipulates and returns
145// a string.
146expression	::=	boolean_expression<false>;
147
148// A condition for 'while', 'if', ... statements.
149boolean_expression	::= ternary_expression<bNumeric> [boolean_operator #continue ternary_expression<bNumeric>]*;
150
151// A concatenation of string expressions: the '+' is interpreted as
152// concatenation.
153concatenation_expression	::= comparison_member_expression<false>;
154
155// The template non terminal 'expression<bNumeric>' handles a string
156// expression when the template variable 'bNumeric' is worth false
157// ('false' is a keyword of the language that means an empty string),
158// and an arithmetic expression when it is instantiated with true
159// (keyword that means "true").
160// See the escape mode '$' in 'literal_expression<bNumeric>' to
161// understand how to swap in arithmetic mode.
162expression<bNumeric>	::=	boolean_expression<bNumeric>;
163
164// Generic form of a boolean expression, both for arithmetic and string
165// expressions.
166boolean_expression<bNumeric>	::= ternary_expression<bNumeric> [boolean_operator #continue ternary_expression<bNumeric>]*;
167boolean_operator	::= "&&" | "||" | "^^" | '&' | '|' | '^';
168
169// Non terminal of the C-like ternary operator '?' ':'.
170ternary_expression<bNumeric>	::= comparison_expression<bNumeric> ['?' #continue expression<bNumeric> ':' expression<bNumeric>]?;
171
172// Generic form of a comparison (both arithmetic and string).
173comparison_expression<bNumeric>	::= comparison_member_expression<bNumeric> [comparison_operator #continue comparison_member_expression<bNumeric>]*;
174comparison_operator	::=	"<=" | "<>" | ">=" | "!=" | "==" | '<' | '=' | '>';
175
176// The generic non-terminal 'comparison_member_expression' is quite
177// particular. A comparison's member returns either a numeric (stored as
178// a string) or a string. Here, 'comparison_member_expression<true>'
179// handles an arithmetic expression. It means that it recognizes
180// arithmetic operators ('+' means addition instead of concatenation).
181comparison_member_expression<true>	::= shift_expression [sum_operator #continue shift_expression]*;
182sum_operator	::= '+' | '-';
183
184// Binary shift operators, as in C/C++/Java ...
185shift_expression	::= factor_expression [shift_operator #continue factor_expression]*;
186shift_operator	::= "<<" | ">>";
187
188// The multiplication.
189factor_expression	::= literal_expression<true> [factor_operator #continue literal_expression<true>]*;
190factor_operator	::= '*' | '/' | '%';
191
192
193// The non-terminal 'comparison_member_expression<false>' recognizes
194// string expressions only and '+' means concatenation. Arithmetic
195// operators like '-' and '%' aren't available.
196comparison_member_expression<false>	::= literal_expression<false> ['+' #continue literal_expression<false>]*;
197
198
199// The generic non terminal of a literal:
200//   - string between double quotes,
201//   - expression between parenthesis,
202//   - arithmetic expression between '$' (cannot be reentrant),
203//   - bitwise negation,
204//   - constant char (interpreted as a string in CodeWorker),
205//   - boolean negation,
206//   - number (interpreted as a string in CodeWorker),
207//   - predefined constants 'true' (= "true") and 'false' (= ""),
208//   - function call,
209//   - variable expression, perhaps followed by a method call.
210literal_expression<bNumeric>	::=
211		CONSTANT_STRING
212	|
213		'(' #continue expression<bNumeric> ')'
214	|
215		'$' #continue #check(!bNumeric) expression<true> '$'
216	|
217		'~' #continue #check(bNumeric) literal_expression<true>
218	|
219		CONSTANT_CHAR
220	|
221		'!' #continue literal_expression<bNumeric>
222	|
223		#readNumeric // scans a number
224	|
225		#readIdentifier:{"true", "false"}
226	|
227		function_call
228	|
229		variable_expression ['.' #continue method_call]?
230		;
231
232// Non terminal of a variable.
233variable_expression	::=
234		#readIdentifier:sIdentifier variable_expression<sIdentifier>
235	|
236		'#' #continue "evaluateVariable" '(' expression ')'
237		;
238
239// The right-side of a variable. '#!ignore' in the non-terminal declaration
240// part of the production rule means that neither blanks or C++-like comments
241// must be scanned before calling the non-terminal. Because of an ambiguity
242// on '#' and '[' with the extended-BNF syntax, whitespaces aren't allowed
243// before them in a variable expression, while a BNF directive (#...) or a
244// repeatable sequence ([...]...) must have at least a blank or comment before
245// them.
246//
247//   - points to a subnode with '.' as in C/C++/Java... for accessing
248//     the attributes of a structure,
249//   - points to an item of the current node's array,
250//   - accesses to the first/last item of the array or to the parent's node,
251//   - accesses to the nth item of the array (starting at 0),
252variable_expression<sIdentifier> : #!ignore	::=
253		[
254				#ignore '.' #readIdentifier
255				![['<' concatenation_expression '>']? '(']
256			|
257				'[' #ignore #continue expression ']'
258			|
259				'#'
260				[
261						#readIdentifier:{"front", "back", "parent"}
262					|
263						'[' #ignore #continue expression ']'
264				]
265		]*
266		;
267
268// A method call consists of calling a function where (generally) the first
269// parameter is provided as an expression on the left-side:
270//    sText.findString('/');
271// calls the function
272//    findString(sText, '/');
273// For some predefined functions, the expression doesn't represent
274// the first parameter:
275//    list.findElement("BNF");
276// calls the function
277//    findElement("BNF", list);
278// where 'list' occupied the second position.
279method_call	::=
280		#readIdentifier:sMethodName
281		[
282				predefined_method_call<sMethodName>
283			|
284				user_method_call<sMethodName>
285		];
286user_method_call	::=	['<' concatenation_expression '>']? '(' #continue [expression [',' #continue expression]*]? ')';
287
288// Call of a predefined/user-defined function.
289function_call	::=
290		#readIdentifier:sFunctionName
291		[
292				predefined_function_call<sFunctionName>
293			|
294				user_function_call
295		];
296user_function_call	::=	['<' concatenation_expression '>']? '(' #continue [expression [',' #continue expression]*]? ')';
297
298
299//-------------------------------------------------------------
300//                          The instructions
301//-------------------------------------------------------------
302
303// The non-terminal of an instruction:
304//   - a block of instructions,
305//   - a simple statement,
306//   - a call to a predefined function,
307//   - a call to a predefined procedure,
308//   - a call to a user function,
309//   - a preprocessor directive,
310//   - a server page's raw text (between @ or %> <%).
311instruction	::=
312		'{' #continue [instruction]* '}'
313	|
314		#readIdentifier:sKeyword
315		[
316				instruction<sKeyword>
317			|
318				predefined_function_call<sKeyword> ';'
319			|
320				predefined_procedure_call<sKeyword> ';'
321			|
322				user_function_call ';'
323		]
324	|
325		'#'
326		#readIdentifier:sKeyword
327		preprocessor<sKeyword>
328	|
329		#check(this != "procedural")
330		['@' | "%>"]
331		#!ignore
332		#continue ->['@' | "<%" | #empty]
333		#ignore
334		[expression ![!'@' !"%>" !#empty]]?
335		;
336
337// The non-terminal 'preprocessor<"include">' includes a script file.
338preprocessor<"include">	::= #continue CONSTANT_STRING;
339
340// The generic form 'instruction<sIdentifier>' is called when the keyword
341// wasn't recognized as a statement. It might be an assignment.
342instruction<sIdentifier>	::=	variable_expression<sIdentifier> ['=' | "+="] #continue expression ';';
343
344//------------------ Some classical statements ------------------
345instruction<"if">	::= #continue boolean_expression instruction [ELSE #continue instruction]?;
346instruction<"do">	::= #continue instruction WHILE boolean_expression ';';
347instruction<"while">	::= #continue boolean_expression instruction;
348
349// The 'switch' statement works on strings. The 'start' label takes the
350// flow of control if the controlled sequence starts with the corresponding
351// constant expression.
352instruction<"switch">	::= #continue '(' expression ')' switch_body;
353switch_body	::=
354		'{'
355		#continue
356		[
357			[
358				DEFAULT
359			|
360				[CASE | START] #continue CONSTANT_STRING
361			]
362			':'
363			[instruction]*
364		]*
365		'}';
366
367
368//------------------ Some assignment operators ------------------
369
370// Declare a local variable on the stack as a tree. The scope manages its
371// timelife. A value may be assigned to the variable.
372instruction<"local">	::= #continue variable_expression ['=' #continue expression]? ';';
373
374// Declare a global variable visible everywhere. A value may be assigned
375// to the variable.
376instruction<"global">	::= #continue variable_expression ['=' #continue expression]? ';';
377
378// Declare a local variable and assign a reference to another node.
379//     localref A = B;
380//   is the equivalent of:
381//     local A;
382//     ref A = B;
383instruction<"localref">	::= #continue variable_expression '=' variable_expression ';';
384
385// Copy a node to another integrally, after cleaning the destination node.
386instruction<"setall">	::= #continue variable_expression '=' variable_expression ';';
387
388// Merge a node to another integrally.
389instruction<"merge">	::= #continue variable_expression '=' variable_expression ';';
390
391// Classical assignment of a value to a node. If the node doesn't exist
392// yet, a warning is displayed but the node is created and the value
393// assigned. It is better to use 'insert' to create a node.
394instruction<"set">	::= #continue variable_expression ["+=" | '='] expression ';';
395
396// Assignment of a value to a node. If the node doesn't exist yet, it is created.
397// If nothing has to be assigned, the node is just created.
398instruction<"insert">	::= #continue variable_expression [["+=" | '='] #continue expression]? ';';
399
400// Assigns a reference to another node.
401instruction<"ref">	::= #continue variable_expression '=' variable_expression ';';
402
403// Adds a new item in an array, whose key is worth the position of the item
404// in the array (the last) starting at 0.
405instruction<"pushItem">	::= #continue variable_expression ['=' #continue expression]? ';';
406
407// The statement 'foreach' iterates items of an array.
408// It may sort items before, taking the case into account or not.
409// It may propagate the iteration on branches, which have the same
410// name as the array. Example: 'foreach i in cascading a.b.c ...'
411// will propagate the 'foreach' on 'i.c' and so on recursively.
412instruction<"foreach">	::= #continue #readIdentifier
413		IN
414		[
415				SORTED
416				[NO_CASE]?
417			|
418				CASCADING
419				[#readIdentifier:{"first", "last"}]?
420		]*
421		variable_expression
422		instruction
423		;
424
425// The 'continue' statement, same meaning as in C/C++/Java.
426instruction<"continue">	::= #continue ';';
427// The 'break' statement, same meaning as in C/C++/Java.
428instruction<"break">	::= #continue ';';
429
430// The statement 'forfile' browses a directory and iterates all
431// files matching a pattern. The seach is recursive on directories
432// if 'cascading' is chosen.
433instruction<"forfile">	::= #continue #readIdentifier
434		IN
435		[
436				SORTED
437				[NO_CASE]?
438			|
439				CASCADING
440				[#readIdentifier:{"first", "last"}]?
441		]*
442		expression
443		instruction
444		;
445
446// The statement 'select' crosscuts all tree nodes that match a
447// pattern of branch, in the spirit of XPath (XSL).
448instruction<"select">	::= #continue #readIdentifier
449		IN
450		[SORTED]?
451		motif_expression
452		instruction
453		;
454
455// the non-terminal 'motif_expression' defines a kind of XPath expression
456// to apply on a subtree.
457motif_expression	::=
458		[
459				'(' #continue motif_expression ')'
460			|
461				motif_and_expression
462		]
463		[
464			["||" | '|']
465			#continue
466			motif_and_expression
467		]*;
468motif_and_expression	::=	motif_concat_expression [["&&" | '&'] #continue motif_concat_expression]*;
469motif_concat_expression	::= motif_path_expression ['+' #continue motif_path_expression]*;
470motif_path_expression	::=
471		motif_step_expression
472		[
473				"..." #continue motif_ellipsis_expression
474			|
475				'.' #continue motif_step_expression
476		]*;
477motif_ellipsis_expression	::= motif_step_expression;
478motif_step_expression	::=
479		#continue
480		['*' | #readIdentifier]
481		['[' [expression]? ']']*
482		;
483
484
485//---------- Declaration / definition of user-defined functions ----------
486
487// The definition of a user-defined function starts with the keyword
488// 'function'. A function may have a kind of template form, instantiated
489// with a key between '<' and '>'.
490instruction<"function">	::= #continue #readIdentifier ['<' #continue CONSTANT_STRING '>']? '(' [function_parameter [',' #continue function_parameter]*]? ')' function_body;
491function_parameter	::=	#readIdentifier [':' #continue #readIdentifier:{"value", "variable", "node", "reference", "index"}]?;
492function_body	::=	#continue '{' [instruction]* '}';
493
494// Forward declaration of a function.
495instruction<"declare">	::= #continue #readIdentifier:"function" #readIdentifier ['<' #continue CONSTANT_STRING '>']? '(' [function_parameter [',' #continue function_parameter]*]? ')' ';';
496
497// External function: binding with a C++ implementation of the function,
498// defined by the user.
499instruction<"external">	::= #continue #readIdentifier:"function" #readIdentifier ['<' #continue CONSTANT_STRING '>']? '(' [function_parameter [',' #continue function_parameter]*]? ')' ';';
500
501// The hook 'readonlyHook' is called when the tool tries to save a generated
502// file but that the replaced file is locked for writing. The name of the file
503// is passed by value. It must return a non-empty value if the file have been
504// unlocked in the body (suceeded call to the source code control system).
505instruction<"readonlyHook">	::= #continue '(' #readIdentifier ')' function_body;
506
507instruction<"writefileHook">	::= #continue '(' #readIdentifier ',' #readIdentifier ',' #readIdentifier ')' function_body;
508
509// Returns the value of a user-defined function. It is never a node.
510instruction<"return">	::= #continue expression ';';
511
512// Classical 'try/catch' statement. The tool puts the error message into a
513// variable.
514instruction<"try">	::= #continue instruction "catch" '(' variable_expression ')' instruction;
515
516// The statement 'finally' defines a block to execute each time the flow
517// of control leaves the scope of the function, even in case of exception
518// raising.
519instruction<"finally">	::= #continue instruction;
520
521// Deprecated way to call a function, ignoring the output result.
522instruction<"nop">	::= #continue '(' function_call ')' ';';
523
524
525//---------- Statement modifiers ----------
526
527// Choose a file as the standard input (function 'inputLine()').
528instruction<"file_as_standard_input">	::= #continue '(' expression ')' instruction;
529
530// Choose a string as the standard input (function 'inputLine()').
531instruction<"string_as_standard_input">	::= #continue '(' expression ')' instruction;
532
533// Redirects all console outputs to a variable while running an instruction.
534instruction<"quiet">	::= #continue '(' variable_expression ')' instruction;
535
536// Measures the time consumed by an instruction. Use 'getLastDelay()' to
537// take the value in milliseconds after running the instruction.
538instruction<"delay">	::= #continue instruction;
539
540// Runs an instruction under the integrated debug mode, running to the
541// console.
542instruction<"debug">	::= #continue instruction;
543
544// Runs an instruction under the integrated quantify mode, measuring time
545// consuming in functions and the number of times each line of script is
546// visited.
547instruction<"quantify">	::= #continue ['(' #continue expression ')']? instruction;
548
549// The 'project' tree is the main tree of the application, a global tree.
550// To change it locally, just for running an instruction, use 'new_project'.
551instruction<"new_project">	::= #continue instruction;
552
553// In a translation or BNF script, change of the current parsed file.
554instruction<"parsed_file">	::= #continue '(' expression ')' instruction;
555
556// In a translation or template-based script, change of the current
557// generated file.
558instruction<"generated_file">	::= #continue '(' expression ')' instruction;
559
560// In a translation or template-based script, change of the current
561// output to an appending mode in a given file.
562instruction<"appended_file">	::= #continue '(' expression ')' instruction;
563
564// In a translation or template-based script, change of the current
565// output to a string instead of ta file.
566instruction<"generated_string">	::= #continue '(' variable_expression ')' instruction;
567
568
569//---------------------------------------------------------------------
570//                        Some lexical tokens
571//---------------------------------------------------------------------
572
573DEFAULT	::= #readIdentifier:"default";
574CASE	::= #readIdentifier:"case";
575START	::= #readIdentifier:"start";
576CASCADING	::= #readIdentifier:"cascading";
577ELSE	::= #readIdentifier:"else";
578IN		::= #readIdentifier:"in";
579NO_CASE	::= #readIdentifier:"no_case";
580SORTED	::= #readIdentifier:"sorted";
581WHILE	::= #readIdentifier:"while";
582
583CONSTANT_STRING	::= #readCString;
584CONSTANT_CHAR	::= '\'' #!ignore #continue ['\\']? #readChar '\'';
585
586PRULE_SYMBOL	::= "::=";
587NON_TERMINAL	::=	#readIdentifier;
588ALTERNATION		::= '|';
589TR_BEGIN		::= '<';
590TR_END			::= '>';
591
592//---------------------------------------------------------------------
593//                                BNF script
594//---------------------------------------------------------------------
595
596// A BNF directive starts with the symbol '#' and may be related to the
597// case or to the production rule for ignoring blanks between tokens...
598BNF_general_directive	::=
599		'#'
600		#readIdentifier:sKeyword
601		BNF_general_directive<sKeyword>
602		;
603
604// If not recognized as a BNF directive, it is a common preprocessor
605// directive.
606BNF_general_directive<T>	::= preprocessor<T>;
607
608// If set, the case isn't taken into account.
609BNF_general_directive<"noCase">	::= #check(true);
610
611// Defines the production rule for ignoring comments and blanks between
612// tokens.
613BNF_general_directive<"ignore">	::= #continue PRULE_SYMBOL right_side_production_rule;
614
615// Overload a non-terminal whose production rule has already been defined.
616BNF_general_directive<"overload">	::=
617		'#' #continue #readIdentifier:"ignore" BNF_general_directive<"ignore">
618	|
619		production_rule;
620
621// Only under the translation mode: means that the input stream is copied
622// to the output stream automatically while scanning (useful for program
623// transformations).
624BNF_general_directive<"implicitCopy">	::= ['(' #continue #readIdentifier ['<' #continue CONSTANT_STRING '>']? ')']?;
625
626// Only under the translation mode, chosen by default: the script specifies
627// between '@' symbols (or between '%>' '<%') the text to write in the output
628// stream.
629BNF_general_directive<"explicitCopy">	::= #check(true);
630
631// Definition of a production rule that may be template, resolved/instantiated
632// or not.
633// A non-terminal admits parameters (passed by value, by reference, by node) and
634// may return a value (see documentation).
635production_rule	::=
636		NON_TERMINAL
637		#continue
638		[
639			TR_BEGIN
640			#continue
641			[
642					#readIdentifier
643				|
644					CONSTANT_STRING
645			]
646			TR_END
647		]?
648		[
649			'('
650			#continue
651			[
652				clause_parameter
653				[',' #continue clause_parameter]*
654
655			]?
656			')'
657		]?
658		[
659			':'
660			#readIdentifier:{"value", "node", "list"}
661		]?
662		[BNF_clause_preprocessing]?
663		PRULE_SYMBOL right_side_production_rule
664		;
665
666// Preprocessing just before executing the right side of the production
667// rule.
668BNF_clause_preprocessing	::=
669		':' '#'
670		#continue
671		[
672				'!'
673				#continue
674				#readIdentifier:"ignore"
675			|
676				#readIdentifier:"ignore"
677		];
678
679// A non-terminal may accept parameters. Here are the allowed ones.
680clause_parameter	::=	#readIdentifier #continue ':' #readIdentifier:{"node", "value", "variable", "reference"};
681
682// Right-side of the production rule.
683right_side_production_rule	::= BNF_sequence #continue [ALTERNATION #continue BNF_sequence]* ';';
684BNF_sequence	::= [BNF_literal]+;
685
686// A BNF literal is a terminal or non-terminal or a directive.
687// 'BNF_literal<true>' means that the literal might be followed by a
688// constant (or set of constants) the token must match, or a variable
689// that will receive the scanned token.
690BNF_literal	::=	BNF_literal<true>;
691BNF_literal<bTokenCondition>	::=
692		CONSTANT_STRING
693		[#check(bTokenCondition) ':' #continue variable_expression]?
694	|
695		CONSTANT_CHAR
696		[
697				".." #continue CONSTANT_CHAR
698				[#check(bTokenCondition) BNF_token_post_processing]?
699			|
700				[#check(bTokenCondition) ':' #continue variable_expression]?
701		]
702	|
703		['~' | '^' | '!' | "->"]
704		#continue BNF_literal<false>
705		[#check(bTokenCondition) BNF_token_post_processing]?
706	|
707		'[' #continue BNF_sequence [ALTERNATION #continue BNF_sequence]* ']'
708		[
709			'?' | '+' | '*' | #readInteger
710			[".." #continue [#readInteger | '*']]?
711		]?
712		[#check(bTokenCondition) BNF_token_post_processing]?
713	|
714		'#'
715		#continue
716		[
717				'!'
718				#continue
719				#readIdentifier:"ignore"
720			|
721				#readIdentifier:sDirective
722				BNF_directive<sDirective>:bTokenConditionAllowed
723				[
724					#check(bTokenCondition && bTokenConditionAllowed)
725					BNF_token_post_processing
726				]?
727		]
728	|
729		"=>" #continue instruction
730	|
731		BNF_clause_call
732		[#check(bTokenCondition) BNF_token_post_processing]?
733	;
734
735// '#continue' means that the rest of the sequence must be valid.
736// If not, a syntax error is raised at the point where a literal
737// of the sequence doesn't match the sentence.
738BNF_directive<"continue"> : value	::= #check(true);
739
740// '#noCase' means that the case is ignored for the rest of the sequence.
741BNF_directive<"noCase"> : value	::= #check(true);
742
743// '#super' works on non-terminals that overload a clause. It refers to
744// the overloaded clause.
745BNF_directive<"super"> : value	::=
746		#continue "::" ['#' #continue "super" "::"]* BNF_clause_call
747		=> set BNF_directive = true;
748		;
749
750// BNF directive to catch errors thrown from the sequence inlayed in
751// '#try'/'#catch'.
752BNF_directive<"try"> : value	::=
753		#continue
754		[!['#' #readIdentifier:"catch"] #continue BNF_literal]+
755		BNF_catch;
756BNF_catch	::= '#' "catch" '(' variable_expression ')';
757
758// Directive to change the input file for the rest of the sequence.
759BNF_directive<"parsedFile"> : value	::= #continue '(' expression ')' BNF_sequence;
760
761// Directive to change the output file for the rest of the sequence for a
762// translation script.
763BNF_directive<"generatedFile"> : value	::= #continue '(' expression ')' BNF_sequence;
764
765// Directive to change the output for the rest of the sequence for a
766// translation script. The output is written into a variable.
767BNF_directive<"generatedString"> : value	::= #continue '(' variable_expression ')' BNF_sequence;
768
769// Directive to change the output file for the rest of the sequence for a
770// translation script. The output is appended.
771BNF_directive<"appendedFile"> : value	::= #continue '(' expression ')' BNF_sequence;
772
773// Choose how to ignore insignificant characters between tokens:
774//   - C++/Java/HTML/XML/LaTeX whitespaces and comments,
775//   - blanks
776BNF_directive<"ignore"> : value	::= ['(' #continue ["C++" | "JAVA" | "HTML" | "XML" | "blanks" | "LaTeX"] ')']?;
777
778BNF_directive<"nextStep"> : value	::= #check(true);
779
780// Expects the end of the input file.
781BNF_directive<"empty"> : value	::= #check(true);
782
783// Adds a new item in an array. If the rest of the sequence fails, the item
784// is removed. If the directive had created the array node, it is removed too.
785BNF_directive<"pushItem"> : value	::= #continue '(' variable_expression ')';
786
787// Inserts a new node. If the rest of the sequence fails and if the node wasn't
788// existing before, the node is removed.
789BNF_directive<"insert"> : value	::= #continue '(' variable_expression ')';
790
791// Reads a byte and returns it as a two hexadecimal digits. It admits a post
792// processing for variable assignment or constant's comparison.
793BNF_directive<"readByte"> : value	::= => { set BNF_directive = true; };
794
795// Reads a character. It admits a post processing for variable assignment
796// or constant's comparison.
797BNF_directive<"readChar"> : value	::= => { set BNF_directive = true; };
798
799// Reads a C-like string. It admits a post processing for variable assignment
800// or constant's comparison.
801BNF_directive<"readCString"> : value	::= => { set BNF_directive = true; };
802
803// Reads a C-like identifier. It admits a post processing for variable
804// assignment or constant's comparison.
805BNF_directive<"readIdentifier"> : value	::= => { set BNF_directive = true; };
806
807// Reads a C-like identifier if the position points to the beginning of an
808// identifier. It admits a post processing for variable assignment or
809// constant's comparison.
810BNF_directive<"readCompleteIdentifier"> : value	::= => { set BNF_directive = true; };
811
812// Reads an integer. It admits a post processing for variable
813// assignment or constant's comparison.
814BNF_directive<"readInteger"> : value	::= => { set BNF_directive = true; };
815
816// Reads an floating-point. It admits a post processing for variable
817// assignment or constant's comparison.
818BNF_directive<"readNumeric"> : value	::= => { set BNF_directive = true; };
819
820// Scans a terminal given as the result of an expression. It admits a post
821// processing for variable assignment or constant's comparison.
822BNF_directive<"readText"> : value	::= #continue '(' expression ')' => { set BNF_directive = true; };
823
824// Checks a condition. Does nothing about scan.
825BNF_directive<"check"> : value	::= #continue '(' expression ')';
826
827// Available only in a translation script: swap to 'implicit copy' for the
828// rest of the sequence.
829BNF_directive<"implicitCopy"> : value	::= #check(true);
830
831// Available only in a translation script: swap to 'explicit copy' for the
832// rest of the sequence.
833BNF_directive<"explicitCopy"> : value	::= #check(true);
834
835// The call of a non-terminal.
836BNF_clause_call	::=
837		NON_TERMINAL
838		[TR_BEGIN #continue concatenation_expression TR_END]?
839		['(' #continue [expression [',' #continue expression]*]? ')']?
840		;
841
842// Some tokens accept a post processing. It consists of checking whether
843// the scanned value belongs to a set of constants or not, and/or assigning
844// the value to a variable.
845BNF_token_post_processing	::=
846		[
847			':'
848			[
849					'{' #continue CONSTANT_STRING [',' #continue CONSTANT_STRING]* '}'
850				|
851					CONSTANT_STRING
852			]
853		]?
854		[':' #continue variable_expression]?;
855
856
857//---------------------------------------------------------------------
858//               Predefined functions/methods/procedures
859//---------------------------------------------------------------------
860
861predefined_function_call<T>	::= #check(false);
862//##markup##"predefined_function_call"
863//##begin##"predefined_function_call"
864predefined_function_call<"add">	::=	'(' #continue expression ',' expression ')';
865predefined_function_call<"byteToChar">	::=	'(' #continue expression ')';
866predefined_function_call<"canonizePath">	::=	'(' #continue expression ')';
867predefined_function_call<"changeDirectory">	::=	'(' #continue expression ')';
868predefined_function_call<"changeFileTime">	::=	'(' #continue expression ',' expression ',' expression ')';
869predefined_function_call<"charAt">	::=	'(' #continue expression ',' expression ')';
870predefined_function_call<"charToByte">	::=	'(' #continue expression ')';
871predefined_function_call<"charToInt">	::=	'(' #continue expression ')';
872predefined_function_call<"chmod">	::=	'(' #continue expression ',' expression ')';
873predefined_function_call<"compareDate">	::=	'(' #continue expression ',' expression ')';
874predefined_function_call<"completeDate">	::=	'(' #continue expression ',' expression ')';
875predefined_function_call<"completeLeftSpaces">	::=	'(' #continue expression ',' expression ')';
876predefined_function_call<"completeRightSpaces">	::=	'(' #continue expression ',' expression ')';
877predefined_function_call<"composeCLikeString">	::=	'(' #continue expression ')';
878predefined_function_call<"composeHTMLLikeString">	::=	'(' #continue expression ')';
879predefined_function_call<"coreString">	::=	'(' #continue expression ',' expression ',' expression ')';
880predefined_function_call<"countStringOccurences">	::=	'(' #continue expression ',' expression ')';
881predefined_function_call<"createVirtualFile">	::=	'(' #continue expression ',' expression ')';
882predefined_function_call<"createVirtualTemporaryFile">	::=	'(' #continue expression ')';
883predefined_function_call<"decodeURL">	::=	'(' #continue expression ')';
884predefined_function_call<"decrement">	::=	'(' #continue variable_expression ')';
885predefined_function_call<"deleteFile">	::=	'(' #continue expression ')';
886predefined_function_call<"deleteVirtualFile">	::=	'(' #continue expression ')';
887predefined_function_call<"div">	::=	'(' #continue expression ',' expression ')';
888predefined_function_call<"encodeURL">	::=	'(' #continue expression ')';
889predefined_function_call<"endl">	::=	'(' #continue ')';
890predefined_function_call<"endString">	::=	'(' #continue expression ',' expression ')';
891predefined_function_call<"equal">	::=	'(' #continue expression ',' expression ')';
892predefined_function_call<"equalTrees">	::=	'(' #continue variable_expression ',' variable_expression ')';
893predefined_function_call<"executeStringQuiet">	::=	'(' #continue variable_expression ',' expression ')';
894predefined_function_call<"existEnv">	::=	'(' #continue expression ')';
895predefined_function_call<"existFile">	::=	'(' #continue expression ')';
896predefined_function_call<"existVirtualFile">	::=	'(' #continue expression ')';
897predefined_function_call<"existVariable">	::=	'(' #continue variable_expression ')';
898predefined_function_call<"exploreDirectory">	::=	'(' #continue variable_expression ',' expression ',' expression ')';
899predefined_function_call<"extractGenerationHeader">	::=	'(' #continue expression ',' variable_expression ',' variable_expression ',' variable_expression ')';
900predefined_function_call<"fileCreation">	::=	'(' #continue expression ')';
901predefined_function_call<"fileLastAccess">	::=	'(' #continue expression ')';
902predefined_function_call<"fileLastModification">	::=	'(' #continue expression ')';
903predefined_function_call<"fileLines">	::=	'(' #continue expression ')';
904predefined_function_call<"fileMode">	::=	'(' #continue expression ')';
905predefined_function_call<"fileSize">	::=	'(' #continue expression ')';
906predefined_function_call<"findElement">	::=	'(' #continue expression ',' variable_expression ')';
907predefined_function_call<"findFirstChar">	::=	'(' #continue expression ',' expression ')';
908predefined_function_call<"findFirstSubstringIntoKeys">	::=	'(' #continue expression ',' variable_expression ')';
909predefined_function_call<"findLastString">	::=	'(' #continue expression ',' expression ')';
910predefined_function_call<"findNextString">	::=	'(' #continue expression ',' expression ',' expression ')';
911predefined_function_call<"findNextSubstringIntoKeys">	::=	'(' #continue expression ',' variable_expression ',' expression ')';
912predefined_function_call<"findString">	::=	'(' #continue expression ',' expression ')';
913predefined_function_call<"first">	::=	'(' #continue #readIdentifier ')';
914predefined_function_call<"floor">	::=	'(' #continue expression ')';
915predefined_function_call<"formatDate">	::=	'(' #continue expression ',' expression ')';
916predefined_function_call<"getArraySize">	::=	'(' #continue variable_expression ')';
917predefined_function_call<"getCommentBegin">	::=	'(' #continue ')';
918predefined_function_call<"getCommentEnd">	::=	'(' #continue ')';
919predefined_function_call<"getCurrentDirectory">	::=	'(' #continue ')';
920predefined_function_call<"getEnv">	::=	'(' #continue expression ')';
921predefined_function_call<"getGenerationHeader">	::=	'(' #continue ')';
922predefined_function_call<"getHTTPRequest">	::=	'(' #continue expression ',' variable_expression ',' variable_expression ')';
923predefined_function_call<"getIncludePath">	::=	'(' #continue ')';
924predefined_function_call<"getLastDelay">	::=	'(' #continue ')';
925predefined_function_call<"getNow">	::=	'(' #continue ')';
926predefined_function_call<"getProperty">	::=	'(' #continue expression ')';
927predefined_function_call<"getTextMode">	::=	'(' #continue ')';
928predefined_function_call<"getVersion">	::=	'(' #continue ')';
929predefined_function_call<"getWorkingPath">	::=	'(' #continue ')';
930predefined_function_call<"hexaToDecimal">	::=	'(' #continue expression ')';
931predefined_function_call<"increment">	::=	'(' #continue variable_expression ')';
932predefined_function_call<"indentFile">	::=	'(' #continue expression ')';
933predefined_function_call<"inf">	::=	'(' #continue expression ',' expression ')';
934predefined_function_call<"inputLine">	::=	'(' #continue expression ')';
935predefined_function_call<"isEmpty">	::=	'(' #continue variable_expression ')';
936predefined_function_call<"isIdentifier">	::=	'(' #continue expression ')';
937predefined_function_call<"isNegative">	::=	'(' #continue expression ')';
938predefined_function_call<"isPositive">	::=	'(' #continue expression ')';
939predefined_function_call<"key">	::=	'(' #continue #readIdentifier ')';
940predefined_function_call<"last">	::=	'(' #continue #readIdentifier ')';
941predefined_function_call<"leftString">	::=	'(' #continue expression ',' expression ')';
942predefined_function_call<"lengthString">	::=	'(' #continue expression ')';
943predefined_function_call<"loadBinaryFile">	::=	'(' #continue expression ')';
944predefined_function_call<"loadFile">	::=	'(' #continue expression ')';
945predefined_function_call<"loadVirtualFile">	::=	'(' #continue expression ')';
946predefined_function_call<"midString">	::=	'(' #continue expression ',' expression ',' expression ')';
947predefined_function_call<"mod">	::=	'(' #continue expression ',' expression ')';
948predefined_function_call<"mult">	::=	'(' #continue expression ',' expression ')';
949predefined_function_call<"not">	::=	'(' #continue expression ')';
950predefined_function_call<"octalToDecimal">	::=	'(' #continue expression ')';
951predefined_function_call<"parseFreeQuiet">	::=	'(' #continue expression ',' variable_expression ',' expression ')';
952predefined_function_call<"pathFromPackage">	::=	'(' #continue expression ')';
953predefined_function_call<"postHTTPRequest">	::=	'(' #continue expression ',' variable_expression ',' variable_expression ')';
954predefined_function_call<"pow">	::=	'(' #continue expression ',' expression ')';
955predefined_function_call<"randomInteger">	::=	'(' #continue ')';
956predefined_function_call<"relativePath">	::=	'(' #continue expression ',' expression ')';
957predefined_function_call<"removeDirectory">	::=	'(' #continue expression ')';
958predefined_function_call<"repeatString">	::=	'(' #continue expression ',' expression ')';
959predefined_function_call<"replaceString">	::=	'(' #continue expression ',' expression ',' expression ')';
960predefined_function_call<"replaceTabulations">	::=	'(' #continue expression ',' expression ')';
961predefined_function_call<"rightString">	::=	'(' #continue expression ',' expression ')';
962predefined_function_call<"rsubString">	::=	'(' #continue expression ',' expression ')';
963predefined_function_call<"scanDirectories">	::=	'(' #continue variable_expression ',' expression ',' expression ')';
964predefined_function_call<"scanFiles">	::=	'(' #continue variable_expression ',' expression ',' expression ',' expression ')';
965predefined_function_call<"sendHTTPRequest">	::=	'(' #continue expression ',' variable_expression ')';
966predefined_function_call<"startString">	::=	'(' #continue expression ',' expression ')';
967predefined_function_call<"sub">	::=	'(' #continue expression ',' expression ')';
968predefined_function_call<"subString">	::=	'(' #continue expression ',' expression ')';
969predefined_function_call<"sup">	::=	'(' #continue expression ',' expression ')';
970predefined_function_call<"system">	::=	'(' #continue expression ')';
971predefined_function_call<"toLowerString">	::=	'(' #continue expression ')';
972predefined_function_call<"toUpperString">	::=	'(' #continue expression ')';
973predefined_function_call<"trimLeft">	::=	'(' #continue variable_expression ')';
974predefined_function_call<"trimRight">	::=	'(' #continue variable_expression ')';
975predefined_function_call<"trim">	::=	'(' #continue variable_expression ')';
976predefined_function_call<"truncateAfterString">	::=	'(' #continue variable_expression ',' expression ')';
977predefined_function_call<"truncateBeforeString">	::=	'(' #continue variable_expression ',' expression ')';
978predefined_function_call<"UUID">	::=	'(' #continue ')';
979predefined_function_call<"getLastReadChars">	::=	'(' #continue expression ')';
980predefined_function_call<"getLocation">	::=	'(' #continue ')';
981predefined_function_call<"lookAhead">	::=	'(' #continue expression ')';
982predefined_function_call<"peekChar">	::=	'(' #continue ')';
983predefined_function_call<"readByte">	::=	'(' #continue ')';
984predefined_function_call<"readChar">	::=	'(' #continue ')';
985predefined_function_call<"readCharAsInt">	::=	'(' #continue ')';
986predefined_function_call<"readIdentifier">	::=	'(' #continue ')';
987predefined_function_call<"readIfEqualTo">	::=	'(' #continue expression ')';
988predefined_function_call<"readIfEqualToIgnoreCase">	::=	'(' #continue expression ')';
989predefined_function_call<"readIfEqualToIdentifier">	::=	'(' #continue expression ')';
990predefined_function_call<"readLine">	::=	'(' #continue variable_expression ')';
991predefined_function_call<"readNextText">	::=	'(' #continue expression ')';
992predefined_function_call<"readNumber">	::=	'(' #continue variable_expression ')';
993predefined_function_call<"readString">	::=	'(' #continue variable_expression ')';
994predefined_function_call<"readUptoJustOneChar">	::=	'(' #continue expression ')';
995predefined_function_call<"readWord">	::=	'(' #continue ')';
996predefined_function_call<"skipBlanks">	::=	'(' #continue ')';
997predefined_function_call<"skipEmptyCpp">	::=	'(' #continue ')';
998predefined_function_call<"skipEmptyHTML">	::=	'(' #continue ')';
999predefined_function_call<"skipEmptyLaTeX">	::=	'(' #continue ')';
1000predefined_function_call<"getFloatingLocation">	::=	'(' #continue expression ')';
1001predefined_function_call<"getLastWrittenChars">	::=	'(' #continue expression ')';
1002predefined_function_call<"getMarkupKey">	::=	'(' #continue ')';
1003predefined_function_call<"getMarkupValue">	::=	'(' #continue ')';
1004predefined_function_call<"getOutputLocation">	::=	'(' #continue ')';
1005predefined_function_call<"getProtectedArea">	::=	'(' #continue expression ')';
1006predefined_function_call<"getProtectedAreaKeys">	::=	'(' #continue variable_expression ')';
1007predefined_function_call<"indentText">	::=	'(' #continue expression ')';
1008predefined_function_call<"newFloatingLocation">	::=	'(' #continue expression ')';
1009predefined_function_call<"remainingProtectedAreas">	::=	'(' #continue variable_expression ')';
1010predefined_function_call<"removeProtectedArea">	::=	'(' #continue expression ')';
1011//##end##"predefined_function_call"
1012
1013predefined_method_call<T> : value	::= #check(false);
1014//##markup##"predefined_method_call"
1015//##begin##"predefined_method_call"
1016predefined_method_call<"add"> : value	::=	'(' #continue expression ')' => set predefined_method_call = "add"; ;
1017predefined_method_call<"byteToChar"> : value	::=	'(' #continue ')' => set predefined_method_call = "byteToChar"; ;
1018predefined_method_call<"canonizePath"> : value	::=	'(' #continue ')' => set predefined_method_call = "canonizePath"; ;
1019predefined_method_call<"changeDirectory"> : value	::=	'(' #continue ')' => set predefined_method_call = "changeDirectory"; ;
1020predefined_method_call<"changeFileTime"> : value	::=	'(' #continue expression ',' expression ')' => set predefined_method_call = "changeFileTime"; ;
1021predefined_method_call<"charAt"> : value	::=	'(' #continue expression ')' => set predefined_method_call = "charAt"; ;
1022predefined_method_call<"charToByte"> : value	::=	'(' #continue ')' => set predefined_method_call = "charToByte"; ;
1023predefined_method_call<"charToInt"> : value	::=	'(' #continue ')' => set predefined_method_call = "charToInt"; ;
1024predefined_method_call<"chmod"> : value	::=	'(' #continue expression ')' => set predefined_method_call = "chmod"; ;
1025predefined_method_call<"compareDate"> : value	::=	'(' #continue expression ')' => set predefined_method_call = "compareDate"; ;
1026predefined_method_call<"completeDate"> : value	::=	'(' #continue expression ')' => set predefined_method_call = "completeDate"; ;
1027predefined_method_call<"completeLeftSpaces"> : value	::=	'(' #continue expression ')' => set predefined_method_call = "completeLeftSpaces"; ;
1028predefined_method_call<"completeRightSpaces"> : value	::=	'(' #continue expression ')' => set predefined_method_call = "completeRightSpaces"; ;
1029predefined_method_call<"composeCLikeString"> : value	::=	'(' #continue ')' => set predefined_method_call = "composeCLikeString"; ;
1030predefined_method_call<"composeHTMLLikeString"> : value	::=	'(' #continue ')' => set predefined_method_call = "composeHTMLLikeString"; ;
1031predefined_method_call<"coreString"> : value	::=	'(' #continue expression ',' expression ')' => set predefined_method_call = "coreString"; ;
1032predefined_method_call<"countStringOccurences"> : value	::=	'(' #continue expression ')' => set predefined_method_call = "countStringOccurences"; ;
1033predefined_method_call<"createVirtualFile"> : value	::=	'(' #continue expression ')' => set predefined_method_call = "createVirtualFile"; ;
1034predefined_method_call<"createVirtualTemporaryFile"> : value	::=	'(' #continue ')' => set predefined_method_call = "createVirtualTemporaryFile"; ;
1035predefined_method_call<"decodeURL"> : value	::=	'(' #continue ')' => set predefined_method_call = "decodeURL"; ;
1036predefined_method_call<"decrement"> : value	::=	'(' #continue ')' => set predefined_method_call = "decrement"; ;
1037predefined_method_call<"deleteFile"> : value	::=	'(' #continue ')' => set predefined_method_call = "deleteFile"; ;
1038predefined_method_call<"deleteVirtualFile"> : value	::=	'(' #continue ')' => set predefined_method_call = "deleteVirtualFile"; ;
1039predefined_method_call<"div"> : value	::=	'(' #continue expression ')' => set predefined_method_call = "div"; ;
1040predefined_method_call<"encodeURL"> : value	::=	'(' #continue ')' => set predefined_method_call = "encodeURL"; ;
1041predefined_method_call<"endString"> : value	::=	'(' #continue expression ')' => set predefined_method_call = "endString"; ;
1042predefined_method_call<"equal"> : value	::=	'(' #continue expression ')' => set predefined_method_call = "equal"; ;
1043predefined_method_call<"equalTrees"> : value	::=	'(' #continue variable_expression ')' => set predefined_method_call = "equalTrees"; ;
1044predefined_method_call<"executeStringQuiet"> : value	::=	'(' #continue expression ')' => set predefined_method_call = "executeStringQuiet"; ;
1045predefined_method_call<"existEnv"> : value	::=	'(' #continue ')' => set predefined_method_call = "existEnv"; ;
1046predefined_method_call<"existFile"> : value	::=	'(' #continue ')' => set predefined_method_call = "existFile"; ;
1047predefined_method_call<"existVirtualFile"> : value	::=	'(' #continue ')' => set predefined_method_call = "existVirtualFile"; ;
1048predefined_method_call<"existVariable"> : value	::=	'(' #continue ')' => set predefined_method_call = "existVariable"; ;
1049predefined_method_call<"exploreDirectory"> : value	::=	'(' #continue expression ',' expression ')' => set predefined_method_call = "exploreDirectory"; ;
1050predefined_method_call<"extractGenerationHeader"> : value	::=	'(' #continue variable_expression ',' variable_expression ',' variable_expression ')' => set predefined_method_call = "extractGenerationHeader"; ;
1051predefined_method_call<"fileCreation"> : value	::=	'(' #continue ')' => set predefined_method_call = "fileCreation"; ;
1052predefined_method_call<"fileLastAccess"> : value	::=	'(' #continue ')' => set predefined_method_call = "fileLastAccess"; ;
1053predefined_method_call<"fileLastModification"> : value	::=	'(' #continue ')' => set predefined_method_call = "fileLastModification"; ;
1054predefined_method_call<"fileLines"> : value	::=	'(' #continue ')' => set predefined_method_call = "fileLines"; ;
1055predefined_method_call<"fileMode"> : value	::=	'(' #continue ')' => set predefined_method_call = "fileMode"; ;
1056predefined_method_call<"fileSize"> : value	::=	'(' #continue ')' => set predefined_method_call = "fileSize"; ;
1057predefined_method_call<"findElement"> : value	::=	'(' #continue expression ')' => set predefined_method_call = "findElement"; ;
1058predefined_method_call<"findFirstChar"> : value	::=	'(' #continue expression ')' => set predefined_method_call = "findFirstChar"; ;
1059predefined_method_call<"findFirstSubstringIntoKeys"> : value	::=	'(' #continue variable_expression ')' => set predefined_method_call = "findFirstSubstringIntoKeys"; ;
1060predefined_method_call<"findLastString"> : value	::=	'(' #continue expression ')' => set predefined_method_call = "findLastString"; ;
1061predefined_method_call<"findNextString"> : value	::=	'(' #continue expression ',' expression ')' => set predefined_method_call = "findNextString"; ;
1062predefined_method_call<"findNextSubstringIntoKeys"> : value	::=	'(' #continue variable_expression ',' expression ')' => set predefined_method_call = "findNextSubstringIntoKeys"; ;
1063predefined_method_call<"findString"> : value	::=	'(' #continue expression ')' => set predefined_method_call = "findString"; ;
1064predefined_method_call<"first"> : value	::=	'(' #continue ')' => set predefined_method_call = "first"; ;
1065predefined_method_call<"floor"> : value	::=	'(' #continue ')' => set predefined_method_call = "floor"; ;
1066predefined_method_call<"formatDate"> : value	::=	'(' #continue expression ')' => set predefined_method_call = "formatDate"; ;
1067predefined_method_call<"size"> : value	::=	'(' #continue ')' => set predefined_method_call = "getArraySize"; ;
1068predefined_method_call<"getArraySize"> : value	::=	'(' #continue ')' => set predefined_method_call = "getArraySize"; ;
1069predefined_method_call<"getEnv"> : value	::=	'(' #continue ')' => set predefined_method_call = "getEnv"; ;
1070predefined_method_call<"getHTTPRequest"> : value	::=	'(' #continue variable_expression ',' variable_expression ')' => set predefined_method_call = "getHTTPRequest"; ;
1071predefined_method_call<"getProperty"> : value	::=	'(' #continue ')' => set predefined_method_call = "getProperty"; ;
1072predefined_method_call<"hexaToDecimal"> : value	::=	'(' #continue ')' => set predefined_method_call = "hexaToDecimal"; ;
1073predefined_method_call<"increment"> : value	::=	'(' #continue ')' => set predefined_method_call = "increment"; ;
1074predefined_method_call<"indentFile"> : value	::=	'(' #continue ')' => set predefined_method_call = "indentFile"; ;
1075predefined_method_call<"inf"> : value	::=	'(' #continue expression ')' => set predefined_method_call = "inf"; ;
1076predefined_method_call<"inputLine"> : value	::=	'(' #continue ')' => set predefined_method_call = "inputLine"; ;
1077predefined_method_call<"empty"> : value	::=	'(' #continue ')' => set predefined_method_call = "isEmpty"; ;
1078predefined_method_call<"isEmpty"> : value	::=	'(' #continue ')' => set predefined_method_call = "isEmpty"; ;
1079predefined_method_call<"isIdentifier"> : value	::=	'(' #continue ')' => set predefined_method_call = "isIdentifier"; ;
1080predefined_method_call<"isNegative"> : value	::=	'(' #continue ')' => set predefined_method_call = "isNegative"; ;
1081predefined_method_call<"isPositive"> : value	::=	'(' #continue ')' => set predefined_method_call = "isPositive"; ;
1082predefined_method_call<"key"> : value	::=	'(' #continue ')' => set predefined_method_call = "key"; ;
1083predefined_method_call<"last"> : value	::=	'(' #continue ')' => set predefined_method_call = "last"; ;
1084predefined_method_call<"leftString"> : value	::=	'(' #continue expression ')' => set predefined_method_call = "leftString"; ;
1085predefined_method_call<"length"> : value	::=	'(' #continue ')' => set predefined_method_call = "lengthString"; ;
1086predefined_method_call<"lengthString"> : value	::=	'(' #continue ')' => set predefined_method_call = "lengthString"; ;
1087predefined_method_call<"loadBinaryFile"> : value	::=	'(' #continue ')' => set predefined_method_call = "loadBinaryFile"; ;
1088predefined_method_call<"loadFile"> : value	::=	'(' #continue ')' => set predefined_method_call = "loadFile"; ;
1089predefined_method_call<"loadVirtualFile"> : value	::=	'(' #continue ')' => set predefined_method_call = "loadVirtualFile"; ;
1090predefined_method_call<"midString"> : value	::=	'(' #continue expression ',' expression ')' => set predefined_method_call = "midString"; ;
1091predefined_method_call<"mod"> : value	::=	'(' #continue expression ')' => set predefined_method_call = "mod"; ;
1092predefined_method_call<"mult"> : value	::=	'(' #continue expression ')' => set predefined_method_call = "mult"; ;
1093predefined_method_call<"not"> : value	::=	'(' #continue ')' => set predefined_method_call = "not"; ;
1094predefined_method_call<"octalToDecimal"> : value	::=	'(' #continue ')' => set predefined_method_call = "octalToDecimal"; ;
1095predefined_method_call<"parseFreeQuiet"> : value	::=	'(' #continue variable_expression ',' expression ')' => set predefined_method_call = "parseFreeQuiet"; ;
1096predefined_method_call<"pathFromPackage"> : value	::=	'(' #continue ')' => set predefined_method_call = "pathFromPackage"; ;
1097predefined_method_call<"postHTTPRequest"> : value	::=	'(' #continue variable_expression ',' variable_expression ')' => set predefined_method_call = "postHTTPRequest"; ;
1098predefined_method_call<"pow"> : value	::=	'(' #continue expression ')' => set predefined_method_call = "pow"; ;
1099predefined_method_call<"relativePath"> : value	::=	'(' #continue expression ')' => set predefined_method_call = "relativePath"; ;
1100predefined_method_call<"removeDirectory"> : value	::=	'(' #continue ')' => set predefined_method_call = "removeDirectory"; ;
1101predefined_method_call<"repeatString"> : value	::=	'(' #continue expression ')' => set predefined_method_call = "repeatString"; ;
1102predefined_method_call<"replaceString"> : value	::=	'(' #continue expression ',' expression ')' => set predefined_method_call = "replaceString"; ;
1103predefined_method_call<"replaceTabulations"> : value	::=	'(' #continue expression ')' => set predefined_method_call = "replaceTabulations"; ;
1104predefined_method_call<"rightString"> : value	::=	'(' #continue expression ')' => set predefined_method_call = "rightString"; ;
1105predefined_method_call<"rsubString"> : value	::=	'(' #continue expression ')' => set predefined_method_call = "rsubString"; ;
1106predefined_method_call<"scanDirectories"> : value	::=	'(' #continue expression ',' expression ')' => set predefined_method_call = "scanDirectories"; ;
1107predefined_method_call<"scanFiles"> : value	::=	'(' #continue expression ',' expression ',' expression ')' => set predefined_method_call = "scanFiles"; ;
1108predefined_method_call<"sendHTTPRequest"> : value	::=	'(' #continue variable_expression ')' => set predefined_method_call = "sendHTTPRequest"; ;
1109predefined_method_call<"startString"> : value	::=	'(' #continue expression ')' => set predefined_method_call = "startString"; ;
1110predefined_method_call<"sub"> : value	::=	'(' #continue expression ')' => set predefined_method_call = "sub"; ;
1111predefined_method_call<"subString"> : value	::=	'(' #continue expression ')' => set predefined_method_call = "subString"; ;
1112predefined_method_call<"sup"> : value	::=	'(' #continue expression ')' => set predefined_method_call = "sup"; ;
1113predefined_method_call<"system"> : value	::=	'(' #continue ')' => set predefined_method_call = "system"; ;
1114predefined_method_call<"toLowerString"> : value	::=	'(' #continue ')' => set predefined_method_call = "toLowerString"; ;
1115predefined_method_call<"toUpperString"> : value	::=	'(' #continue ')' => set predefined_method_call = "toUpperString"; ;
1116predefined_method_call<"trimLeft"> : value	::=	'(' #continue ')' => set predefined_method_call = "trimLeft"; ;
1117predefined_method_call<"trimRight"> : value	::=	'(' #continue ')' => set predefined_method_call = "trimRight"; ;
1118predefined_method_call<"trim"> : value	::=	'(' #continue ')' => set predefined_method_call = "trim"; ;
1119predefined_method_call<"truncateAfterString"> : value	::=	'(' #continue expression ')' => set predefined_method_call = "truncateAfterString"; ;
1120predefined_method_call<"truncateBeforeString"> : value	::=	'(' #continue expression ')' => set predefined_method_call = "truncateBeforeString"; ;
1121predefined_method_call<"getLastReadChars"> : value	::=	'(' #continue ')' => set predefined_method_call = "getLastReadChars"; ;
1122predefined_method_call<"lookAhead"> : value	::=	'(' #continue ')' => set predefined_method_call = "lookAhead"; ;
1123predefined_method_call<"readIfEqualTo"> : value	::=	'(' #continue ')' => set predefined_method_call = "readIfEqualTo"; ;
1124predefined_method_call<"readIfEqualToIgnoreCase"> : value	::=	'(' #continue ')' => set predefined_method_call = "readIfEqualToIgnoreCase"; ;
1125predefined_method_call<"readIfEqualToIdentifier"> : value	::=	'(' #continue ')' => set predefined_method_call = "readIfEqualToIdentifier"; ;
1126predefined_method_call<"readLine"> : value	::=	'(' #continue ')' => set predefined_method_call = "readLine"; ;
1127predefined_method_call<"readNextText"> : value	::=	'(' #continue ')' => set predefined_method_call = "readNextText"; ;
1128predefined_method_call<"readNumber"> : value	::=	'(' #continue ')' => set predefined_method_call = "readNumber"; ;
1129predefined_method_call<"readString"> : value	::=	'(' #continue ')' => set predefined_method_call = "readString"; ;
1130predefined_method_call<"readUptoJustOneChar"> : value	::=	'(' #continue ')' => set predefined_method_call = "readUptoJustOneChar"; ;
1131predefined_method_call<"getFloatingLocation"> : value	::=	'(' #continue ')' => set predefined_method_call = "getFloatingLocation"; ;
1132predefined_method_call<"getLastWrittenChars"> : value	::=	'(' #continue ')' => set predefined_method_call = "getLastWrittenChars"; ;
1133predefined_method_call<"getProtectedArea"> : value	::=	'(' #continue ')' => set predefined_method_call = "getProtectedArea"; ;
1134predefined_method_call<"getProtectedAreaKeys"> : value	::=	'(' #continue ')' => set predefined_method_call = "getProtectedAreaKeys"; ;
1135predefined_method_call<"indentText"> : value	::=	'(' #continue ')' => set predefined_method_call = "indentText"; ;
1136predefined_method_call<"newFloatingLocation"> : value	::=	'(' #continue ')' => set predefined_method_call = "newFloatingLocation"; ;
1137predefined_method_call<"remainingProtectedAreas"> : value	::=	'(' #continue ')' => set predefined_method_call = "remainingProtectedAreas"; ;
1138predefined_method_call<"removeProtectedArea"> : value	::=	'(' #continue ')' => set predefined_method_call = "removeProtectedArea"; ;
1139predefined_method_call<"clearVariable"> : value	::=	'(' #continue ')' => set predefined_method_call = "clearVariable"; ;
1140predefined_method_call<"compileToCpp"> : value	::=	'(' #continue expression ',' expression ')' => set predefined_method_call = "compileToCpp"; ;
1141predefined_method_call<"copyFile"> : value	::=	'(' #continue expression ')' => set predefined_method_call = "copyFile"; ;
1142predefined_method_call<"copyGenerableFile"> : value	::=	'(' #continue expression ')' => set predefined_method_call = "copyGenerableFile"; ;
1143predefined_method_call<"copySmartDirectory"> : value	::=	'(' #continue expression ')' => set predefined_method_call = "copySmartDirectory"; ;
1144predefined_method_call<"copySmartFile"> : value	::=	'(' #continue expression ')' => set predefined_method_call = "copySmartFile"; ;
1145predefined_method_call<"cutString"> : value	::=	'(' #continue expression ',' variable_expression ')' => set predefined_method_call = "cutString"; ;
1146predefined_method_call<"environTable"> : value	::=	'(' #continue ')' => set predefined_method_call = "environTable"; ;
1147predefined_method_call<"error"> : value	::=	'(' #continue ')' => set predefined_method_call = "error"; ;
1148predefined_method_call<"executeString"> : value	::=	'(' #continue expression ')' => set predefined_method_call = "executeString"; ;
1149predefined_method_call<"expand"> : value	::=	'(' #continue variable_expression ',' expression ')' => set predefined_method_call = "expand"; ;
1150predefined_method_call<"generate"> : value	::=	'(' #continue variable_expression ',' expression ')' => set predefined_method_call = "generate"; ;
1151predefined_method_call<"generateString"> : value	::=	'(' #continue variable_expression ',' variable_expression ')' => set predefined_method_call = "generateString"; ;
1152predefined_method_call<"invertArray"> : value	::=	'(' #continue ')' => set predefined_method_call = "invertArray"; ;
1153predefined_method_call<"openLogFile"> : value	::=	'(' #continue ')' => set predefined_method_call = "openLogFile"; ;
1154predefined_method_call<"parseAsBNF"> : value	::=	'(' #continue variable_expression ',' expression ')' => set predefined_method_call = "parseAsBNF"; ;
1155predefined_method_call<"parseStringAsBNF"> : value	::=	'(' #continue variable_expression ',' expression ')' => set predefined_method_call = "parseStringAsBNF"; ;
1156predefined_method_call<"parseFree"> : value	::=	'(' #continue variable_expression ',' expression ')' => set predefined_method_call = "parseFree"; ;
1157predefined_method_call<"produceHTML"> : value	::=	'(' #continue expression ')' => set predefined_method_call = "produceHTML"; ;
1158predefined_method_call<"putEnv"> : value	::=	'(' #continue expression ')' => set predefined_method_call = "putEnv"; ;
1159predefined_method_call<"randomSeed"> : value	::=	'(' #continue ')' => set predefined_method_call = "randomSeed"; ;
1160predefined_method_call<"removeAllElements"> : value	::=	'(' #continue ')' => set predefined_method_call = "removeAllElements"; ;
1161predefined_method_call<"removeElement"> : value	::=	'(' #continue expression ')' => set predefined_method_call = "removeElement"; ;
1162predefined_method_call<"removeFirstElement"> : value	::=	'(' #continue ')' => set predefined_method_call = "removeFirstElement"; ;
1163predefined_method_call<"removeLastElement"> : value	::=	'(' #continue ')' => set predefined_method_call = "removeLastElement"; ;
1164predefined_method_call<"removeRecursive"> : value	::=	'(' #continue expression ')' => set predefined_method_call = "removeRecursive"; ;
1165predefined_method_call<"removeVariable"> : value	::=	'(' #continue ')' => set predefined_method_call = "removeVariable"; ;
1166predefined_method_call<"saveBinaryToFile"> : value	::=	'(' #continue expression ')' => set predefined_method_call = "saveBinaryToFile"; ;
1167predefined_method_call<"saveProject"> : value	::=	'(' #continue ')' => set predefined_method_call = "saveProject"; ;
1168predefined_method_call<"saveProjectTypes"> : value	::=	'(' #continue ')' => set predefined_method_call = "saveProjectTypes"; ;
1169predefined_method_call<"saveToFile"> : value	::=	'(' #continue expression ')' => set predefined_method_call = "saveToFile"; ;
1170predefined_method_call<"setCommentBegin"> : value	::=	'(' #continue ')' => set predefined_method_call = "setCommentBegin"; ;
1171predefined_method_call<"setCommentEnd"> : value	::=	'(' #continue ')' => set predefined_method_call = "setCommentEnd"; ;
1172predefined_method_call<"setGenerationHeader"> : value	::=	'(' #continue ')' => set predefined_method_call = "setGenerationHeader"; ;
1173predefined_method_call<"setIncludePath"> : value	::=	'(' #continue ')' => set predefined_method_call = "setIncludePath"; ;
1174predefined_method_call<"setNow"> : value	::=	'(' #continue ')' => set predefined_method_call = "setNow"; ;
1175predefined_method_call<"setProperty"> : value	::=	'(' #continue expression ')' => set predefined_method_call = "setProperty"; ;
1176predefined_method_call<"setTextMode"> : value	::=	'(' #continue ')' => set predefined_method_call = "setTextMode"; ;
1177predefined_method_call<"setVersion"> : value	::=	'(' #continue ')' => set predefined_method_call = "setVersion"; ;
1178predefined_method_call<"setWorkingPath"> : value	::=	'(' #continue ')' => set predefined_method_call = "setWorkingPath"; ;
1179predefined_method_call<"slideNodeContent"> : value	::=	'(' #continue variable_expression ')' => set predefined_method_call = "slideNodeContent"; ;
1180predefined_method_call<"traceLine"> : value	::=	'(' #continue ')' => set predefined_method_call = "traceLine"; ;
1181predefined_method_call<"traceObject"> : value	::=	'(' #continue ')' => set predefined_method_call = "traceObject"; ;
1182predefined_method_call<"traceText"> : value	::=	'(' #continue ')' => set predefined_method_call = "traceText"; ;
1183predefined_method_call<"translate"> : value	::=	'(' #continue variable_expression ',' expression ',' expression ')' => set predefined_method_call = "translate"; ;
1184predefined_method_call<"setLocation"> : value	::=	'(' #continue ')' => set predefined_method_call = "setLocation"; ;
1185predefined_method_call<"insertText"> : value	::=	'(' #continue expression ')' => set predefined_method_call = "insertText"; ;
1186predefined_method_call<"insertTextOnce"> : value	::=	'(' #continue expression ')' => set predefined_method_call = "insertTextOnce"; ;
1187predefined_method_call<"overwritePortion"> : value	::=	'(' #continue expression ',' expression ')' => set predefined_method_call = "overwritePortion"; ;
1188predefined_method_call<"populateProtectedArea"> : value	::=	'(' #continue expression ')' => set predefined_method_call = "populateProtectedArea"; ;
1189predefined_method_call<"resizeOutputStream"> : value	::=	'(' #continue ')' => set predefined_method_call = "resizeOutputStream"; ;
1190predefined_method_call<"setFloatingLocation"> : value	::=	'(' #continue expression ')' => set predefined_method_call = "setFloatingLocation"; ;
1191predefined_method_call<"setOutputLocation"> : value	::=	'(' #continue ')' => set predefined_method_call = "setOutputLocation"; ;
1192predefined_method_call<"setProtectedArea"> : value	::=	'(' #continue ')' => set predefined_method_call = "setProtectedArea"; ;
1193predefined_method_call<"writeBytes"> : value	::=	'(' #continue ')' => set predefined_method_call = "writeBytes"; ;
1194predefined_method_call<"writeText"> : value	::=	'(' #continue ')' => set predefined_method_call = "writeText"; ;
1195predefined_method_call<"writeTextOnce"> : value	::=	'(' #continue ')' => set predefined_method_call = "writeTextOnce"; ;
1196//##end##"predefined_method_call"
1197
1198predefined_procedure_call<T>	::= #check(false);
1199//##markup##"predefined_procedure_call"
1200//##begin##"predefined_procedure_call"
1201predefined_procedure_call<"clearVariable">	::=	'(' #continue variable_expression ')';
1202predefined_procedure_call<"compileToCpp">	::=	'(' #continue expression ',' expression ',' expression ')';
1203predefined_procedure_call<"copyFile">	::=	'(' #continue expression ',' expression ')';
1204predefined_procedure_call<"copyGenerableFile">	::=	'(' #continue expression ',' expression ')';
1205predefined_procedure_call<"copySmartDirectory">	::=	'(' #continue expression ',' expression ')';
1206predefined_procedure_call<"copySmartFile">	::=	'(' #continue expression ',' expression ')';
1207predefined_procedure_call<"cutString">	::=	'(' #continue expression ',' expression ',' variable_expression ')';
1208predefined_procedure_call<"environTable">	::=	'(' #continue variable_expression ')';
1209predefined_procedure_call<"error">	::=	'(' #continue expression ')';
1210predefined_procedure_call<"executeString">	::=	'(' #continue variable_expression ',' expression ')';
1211predefined_procedure_call<"expand">	::=	'(' #continue expression ',' variable_expression ',' expression ')';
1212predefined_procedure_call<"generate">	::=	'(' #continue expression ',' variable_expression ',' expression ')';
1213predefined_procedure_call<"generateString">	::=	'(' #continue expression ',' variable_expression ',' variable_expression ')';
1214predefined_procedure_call<"invertArray">	::=	'(' #continue variable_expression ')';
1215predefined_procedure_call<"openLogFile">	::=	'(' #continue expression ')';
1216predefined_procedure_call<"parseAsBNF">	::=	'(' #continue expression ',' variable_expression ',' expression ')';
1217predefined_procedure_call<"parseStringAsBNF">	::=	'(' #continue expression ',' variable_expression ',' expression ')';
1218predefined_procedure_call<"parseFree">	::=	'(' #continue expression ',' variable_expression ',' expression ')';
1219predefined_procedure_call<"produceHTML">	::=	'(' #continue expression ',' expression ')';
1220predefined_procedure_call<"putEnv">	::=	'(' #continue expression ',' expression ')';
1221predefined_procedure_call<"randomSeed">	::=	'(' #continue expression ')';
1222predefined_procedure_call<"removeAllElements">	::=	'(' #continue variable_expression ')';
1223predefined_procedure_call<"removeElement">	::=	'(' #continue variable_expression ',' expression ')';
1224predefined_procedure_call<"removeFirstElement">	::=	'(' #continue variable_expression ')';
1225predefined_procedure_call<"removeLastElement">	::=	'(' #continue variable_expression ')';
1226predefined_procedure_call<"removeRecursive">	::=	'(' #continue variable_expression ',' expression ')';
1227predefined_procedure_call<"removeVariable">	::=	'(' #continue variable_expression ')';
1228predefined_procedure_call<"saveBinaryToFile">	::=	'(' #continue expression ',' expression ')';
1229predefined_procedure_call<"saveProject">	::=	'(' #continue expression ')';
1230predefined_procedure_call<"saveProjectTypes">	::=	'(' #continue expression ')';
1231predefined_procedure_call<"saveToFile">	::=	'(' #continue expression ',' expression ')';
1232predefined_procedure_call<"setCommentBegin">	::=	'(' #continue expression ')';
1233predefined_procedure_call<"setCommentEnd">	::=	'(' #continue expression ')';
1234predefined_procedure_call<"setGenerationHeader">	::=	'(' #continue expression ')';
1235predefined_procedure_call<"setIncludePath">	::=	'(' #continue expression ')';
1236predefined_procedure_call<"setNow">	::=	'(' #continue expression ')';
1237predefined_procedure_call<"setProperty">	::=	'(' #continue expression ',' expression ')';
1238predefined_procedure_call<"setTextMode">	::=	'(' #continue expression ')';
1239predefined_procedure_call<"setVersion">	::=	'(' #continue expression ')';
1240predefined_procedure_call<"setWorkingPath">	::=	'(' #continue expression ')';
1241predefined_procedure_call<"slideNodeContent">	::=	'(' #continue variable_expression ',' variable_expression ')';
1242predefined_procedure_call<"traceEngine">	::=	'(' #continue ')';
1243predefined_procedure_call<"traceLine">	::=	'(' #continue expression ')';
1244predefined_procedure_call<"traceObject">	::=	'(' #continue variable_expression ')';
1245predefined_procedure_call<"traceStack">	::=	'(' #continue ')';
1246predefined_procedure_call<"traceText">	::=	'(' #continue expression ')';
1247predefined_procedure_call<"translate">	::=	'(' #continue expression ',' variable_expression ',' expression ',' expression ')';
1248predefined_procedure_call<"goBack">	::=	'(' #continue ')';
1249predefined_procedure_call<"setLocation">	::=	'(' #continue expression ')';
1250predefined_procedure_call<"insertText">	::=	'(' #continue expression ',' expression ')';
1251predefined_procedure_call<"insertTextOnce">	::=	'(' #continue expression ',' expression ')';
1252predefined_procedure_call<"overwritePortion">	::=	'(' #continue expression ',' expression ',' expression ')';
1253predefined_procedure_call<"populateProtectedArea">	::=	'(' #continue expression ',' expression ')';
1254predefined_procedure_call<"resizeOutputStream">	::=	'(' #continue expression ')';
1255predefined_procedure_call<"setFloatingLocation">	::=	'(' #continue expression ',' expression ')';
1256predefined_procedure_call<"setOutputLocation">	::=	'(' #continue expression ')';
1257predefined_procedure_call<"setProtectedArea">	::=	'(' #continue expression ')';
1258predefined_procedure_call<"writeBytes">	::=	'(' #continue expression ')';
1259predefined_procedure_call<"writeText">	::=	'(' #continue expression ')';
1260predefined_procedure_call<"writeTextOnce">	::=	'(' #continue expression ')';
1261//##end##"predefined_procedure_call"
1262