mirror of
https://github.com/pragma-/pbot.git
synced 2024-11-23 12:29:27 +01:00
CGrammar: Now parses int *a[10] and int (*a)[10] and such
This commit is contained in:
parent
9597833b32
commit
c2b4d5cb19
@ -13,8 +13,8 @@ use warnings;
|
|||||||
# These are set automatically by the build/commit script
|
# These are set automatically by the build/commit script
|
||||||
use constant {
|
use constant {
|
||||||
BUILD_NAME => "PBot",
|
BUILD_NAME => "PBot",
|
||||||
BUILD_REVISION => 636,
|
BUILD_REVISION => 637,
|
||||||
BUILD_DATE => "2014-06-12",
|
BUILD_DATE => "2014-06-14",
|
||||||
};
|
};
|
||||||
|
|
||||||
1;
|
1;
|
||||||
|
@ -7,7 +7,6 @@
|
|||||||
# 2. preprocessor directives. (getting there)
|
# 2. preprocessor directives. (getting there)
|
||||||
# 4. functions to handle the nesting levels (ordinal number generator and CPP stack)
|
# 4. functions to handle the nesting levels (ordinal number generator and CPP stack)
|
||||||
# 6. change returns to prints where appropriate.
|
# 6. change returns to prints where appropriate.
|
||||||
# 7. syntax for int *p[10] vs int (*p)[10] vs int *(*p)[10]
|
|
||||||
|
|
||||||
{
|
{
|
||||||
my @defined_types = ('`FILE`');
|
my @defined_types = ('`FILE`');
|
||||||
@ -658,6 +657,21 @@ declaration:
|
|||||||
$first_initializer = shift @args // '';
|
$first_initializer = shift @args // '';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if($first_initializer !~ /^initialized/) {
|
||||||
|
if($first_qualifier =~ /\|initialized/) {
|
||||||
|
my ($fq, $fi) = split /\|/, $first_qualifier, 2;
|
||||||
|
$first_qualifier .= " $fq";
|
||||||
|
$first_initializer = $fi;
|
||||||
|
} elsif($first_initializer =~ /\|initialized/) {
|
||||||
|
my ($fq, $fi) = split /\|/, $first_initializer, 2;
|
||||||
|
$first_qualifier .= " $fq";
|
||||||
|
$first_initializer = $fi;
|
||||||
|
} else {
|
||||||
|
$first_qualifier .= " $first_initializer";
|
||||||
|
$first_initializer = '';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
my @initializers;
|
my @initializers;
|
||||||
if($first_initializer) {
|
if($first_initializer) {
|
||||||
push @initializers, [ $first_identifier, $first_initializer ];
|
push @initializers, [ $first_identifier, $first_initializer ];
|
||||||
@ -1025,17 +1039,7 @@ direct_declarator:
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
| '(' declarator ')' array_declarator(s)
|
| '(' declarator ')' array_declarator(s)
|
||||||
{
|
{ $return = "$item{declarator} " . join('', @{$item{'array_declarator(s)'}}); }
|
||||||
my ($prefix, $name) = split / ([^ ]+)$/, $item{'declarator'};
|
|
||||||
if(not defined $name) {
|
|
||||||
$name = $prefix;
|
|
||||||
$prefix = undef;
|
|
||||||
} else {
|
|
||||||
$prefix .= ' ';
|
|
||||||
}
|
|
||||||
|
|
||||||
$return = "$name|$prefix" . join('', @{$item{'array_declarator(s)'}});
|
|
||||||
}
|
|
||||||
| '(' declarator array_declarator(s) ')'
|
| '(' declarator array_declarator(s) ')'
|
||||||
{ $return = $item{'declarator'} . join('', @{$item{'array_declarator(s)'}}) }
|
{ $return = $item{'declarator'} . join('', @{$item{'array_declarator(s)'}}) }
|
||||||
| '(' declarator ')'
|
| '(' declarator ')'
|
||||||
|
Loading…
Reference in New Issue
Block a user