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