"Name" = 'Pascal Preprocessor' "Version" = '0.1' "Author" = 'DarkStar' "About" = 'PascalABC.NET project' "Case Sensitive" = True "Start Symbol" = !* [TERMINALTEMPLATE] { %NAME% _%NAME%=new %NAME%(%PARAMS%); _%NAME%.source_context=parsertools.GetTokenSourceContext(); %CODE% return _%NAME%; } *! !* [NONTERMINALTEMPLATE0] { %NAME% _%NAME%=new %NAME%(%PARAMS%); parsertools.create_source_context(_%NAME%,%LEFTTOKEN%,%RIGHTTOKEN%); %CODE% return _%NAME%; } *! !add to list !* [NONTERMINALTEMPLATE1] { %NAME% _%NAME%=(%NAME%)%CODE% return _%NAME%; } *! !* [NONTERMINALTEMPLATE2] { %NAME% _%NAME%; %CODE% return _%NAME%; } *! !* [NONTERMINALTEMPLATE3] { %NAME% _%NAME%=new %NAME%(%PARAMS%); %CODE% return _%NAME%; } *! !for list: ! ! token !* [NONTERMINALTEMPLATE6] //TemplateList for %NAME% (create) { %NAME% _%NAME%=new %NAME%(); _%NAME%.source_context=((%CODE%)$1).source_context; _%NAME%.%PARAMS%.Add((%CODE%)$1); return _%NAME%; } *! !* [NONTERMINALTEMPLATE7] //TemplateList for %NAME% (add) { %NAME% _%NAME%=(%NAME%)$1; parsertools.create_source_context(_%NAME%,$$,$3); _%NAME%.%PARAMS%.Add($3 as %CODE%); return _%NAME%; } *! Comment Start = '(*' Comment End = '*)' Comment Line = '//' !{CR} = {#13} !{LF} = {#10} {Id Head} = {Letter} + [_] + ['.'] {Id Tail} = {Id Head} + {Digit} + ['.'] + [','] {All ASCII} = {#1..#255}+{Cyrillic}+{#8100..#8800} {New Line} = ['\'] {WS} = {Whitespace} - {CR} - {LF} {WWSS} = {WS} {Token Part1} = {All ASCII} - {CR} - {LF} - ['{'] {Token Part2} = {All ASCII} - {CR} - {LF} - ['$'] {Program line part1} = {All ASCII} - {CR} - {LF} - {WS} - ['{'] {Program line part2} = {All ASCII} - {CR} - {LF} - ['$'] Whitespace = {WS}+ {TextPart} = {All ASCII} - {Control Codes} {String Ch} = {TextPart} - [''] !TKPNDUNKNOW = '#' {Id Head}{Id Tail}* !**! !TKPNDIF = '#if' !**! !TKPNDIFDEF = '#ifdef' !**! !TKPNDIFNDEF = '#ifndef' !**! !TKPNDELIF = '#elif' !**! !TKPNDELSE = '#else' !**! !TKPNDENDIF = '#endif' !**! TKNEWLINE = {CR}{LF}|{CR} !**! TKPROGRAM_LINE_PART = ({Program line part1} | ('{' {Program line part2}))+ !**! TKDIRECTIVE = '{$'{Id Head}{Id Tail}* ( (' ' {Id Head}{Id Tail}*) | '+' | '-')? '}' !**! !TKPROGRAM_LINE = (( {Token Part1}+ | ('{' ( {Token Part2}| ({CR}{LF}|{CR}))) | ('' {String Ch}* '') )* ({CR}{LF}|{CR}) )* ({CR}{LF}|{CR})!**! !TKPROGRAM_LINE_PART = ({Program line part1} | ('{' {Program line part2}+))+ !**! !TKDIRECTIVE = '{$'{Id Head}{Id Tail}* ( (' ' {Id Head}{Id Tail}*) | '+' | '-')? '}' !**! ::= !*3compilation_unit<> $$.Language=LanguageId.PascalABCNET; if($1!=null){ parsertools.create_source_context($$,$1,$1); CompilerDirectives.AddRange(((compiler_directive_list)$1).directives); } *! ::= <_directive_groups> | <_directive_groups> ::= !*3compiler_directive_list<> if($1 is compiler_directive) $$.directives.Add((compiler_directive)$1); parsertools.create_source_context($$,$1,$1);*! | !*1compiler_directive_list<>$1; if($2 is compiler_directive) $$.directives.Add((compiler_directive)$2); parsertools.create_source_context($$,$1,$2);*! ::= TKNEWLINE | TKPROGRAM_LINE_PART | TKDIRECTIVE !*1compiler_directive<>pascal_parsertools.MakeDirective((token_info)$1);*! ::=