157 lines
3.9 KiB
Plaintext
157 lines
3.9 KiB
Plaintext
"Name" = 'Pascal Preprocessor'
|
|
"Version" = '0.1'
|
|
"Author" = 'DarkStar'
|
|
"About" = 'PascalABC.NET project'
|
|
|
|
"Case Sensitive" = True
|
|
|
|
"Start Symbol" = <preprocessor_program>
|
|
|
|
!*
|
|
[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:
|
|
!<el>
|
|
!<list> token <el>
|
|
!*
|
|
[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}* !*<token_info>*!
|
|
!TKPNDIF = '#if' !*<token_info>*!
|
|
!TKPNDIFDEF = '#ifdef' !*<token_info>*!
|
|
!TKPNDIFNDEF = '#ifndef' !*<token_info>*!
|
|
!TKPNDELIF = '#elif' !*<token_info>*!
|
|
!TKPNDELSE = '#else' !*<token_info>*!
|
|
!TKPNDENDIF = '#endif' !*<token_info>*!
|
|
|
|
TKNEWLINE = {CR}{LF}|{CR} !*<token_info>*!
|
|
TKPROGRAM_LINE_PART = ({Program line part1} | ('{' {Program line part2}))+ !*<token_info>*!
|
|
TKDIRECTIVE = '{$'{Id Head}{Id Tail}* ( (' ' {Id Head}{Id Tail}*) | '+' | '-')? '}' !*<token_info>*!
|
|
|
|
!TKPROGRAM_LINE = (( {Token Part1}+ | ('{' ( {Token Part2}| ({CR}{LF}|{CR}))) | ('' {String Ch}* '') )* ({CR}{LF}|{CR}) )* ({CR}{LF}|{CR})!*<token_info>*!
|
|
!TKPROGRAM_LINE_PART = ({Program line part1} | ('{' {Program line part2}+))+ !*<token_info>*!
|
|
!TKDIRECTIVE = '{$'{Id Head}{Id Tail}* ( (' ' {Id Head}{Id Tail}*) | '+' | '-')? '}' !*<token_info>*!
|
|
|
|
|
|
<preprocessor_program>
|
|
::= <directive_groups> <empty> !*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>
|
|
|
|
|
|
|
<_directive_groups>
|
|
::= <directive_group> <empty> !*3compiler_directive_list<>
|
|
if($1 is compiler_directive)
|
|
$$.directives.Add((compiler_directive)$1);
|
|
parsertools.create_source_context($$,$1,$1);*!
|
|
| <directive_groups> <directive_group> !*1compiler_directive_list<>$1;
|
|
if($2 is compiler_directive)
|
|
$$.directives.Add((compiler_directive)$2);
|
|
parsertools.create_source_context($$,$1,$2);*!
|
|
|
|
<directive_group>
|
|
::= TKNEWLINE
|
|
| TKPROGRAM_LINE_PART
|
|
| TKDIRECTIVE <empty> !*1compiler_directive<>pascal_parsertools.MakeDirective((token_info)$1);*!
|
|
|
|
|
|
<empty>
|
|
::=
|
|
|