From 5c8b845e6d26aacae14834aeabde9a8b06d3f894 Mon Sep 17 00:00:00 2001 From: Pragmatic Software Date: Wed, 11 Jun 2014 07:42:16 +0000 Subject: [PATCH] CGrammar: Fix character-literal and string-literal regexs; add more character-literal constants --- PBot/VERSION.pm | 4 ++-- modules/c2english/CGrammar.pm | 20 ++++++++++++++++---- 2 files changed, 18 insertions(+), 6 deletions(-) diff --git a/PBot/VERSION.pm b/PBot/VERSION.pm index 66d5db6d..eb36b5b4 100644 --- a/PBot/VERSION.pm +++ b/PBot/VERSION.pm @@ -13,8 +13,8 @@ use warnings; # These are set automatically by the build/commit script use constant { BUILD_NAME => "PBot", - BUILD_REVISION => 628, - BUILD_DATE => "2014-06-10", + BUILD_REVISION => 629, + BUILD_DATE => "2014-06-11", }; 1; diff --git a/modules/c2english/CGrammar.pm b/modules/c2english/CGrammar.pm index 9530aa0f..8ad524ee 100644 --- a/modules/c2english/CGrammar.pm +++ b/modules/c2english/CGrammar.pm @@ -1346,14 +1346,26 @@ constant: $return =~ s/[Uu]$/(unsigned)/; $return =~ s/[Ll]$/(long)/; } - | m{'.*?[^\']'} # character constant FIXME: doesn't handle escaped quotes + | /(?:\'((?:\\\'|(?!\').)*)\')/ # character constant { my $constant = $item[1]; - if($constant eq q/'\n'/) { + if($constant eq q('\n')) { $return = 'a newline'; - } elsif($constant eq q/'\t'/) { + } elsif($constant eq q('\f')) { + $return = 'a form-feed character'; + } elsif($constant eq q('\t')) { $return = 'a tab'; + } elsif($constant eq q('\v')) { + $return = 'a vertical tab'; + } elsif($constant eq q('\b')) { + $return = 'an alert character'; + } elsif($constant eq q('\r')) { + $return = 'a carriage-return'; + } elsif($constant eq q('\b')) { + $return = 'a backspace character'; + } elsif($constant eq q('\'')) { + $return = 'a single-quote'; } else { $return = $constant; } @@ -1369,7 +1381,7 @@ identifier_word: { $return = "`$item[-1]`"; } string: - /".*?[^\"]"/ # FIXME: doesn't handle escaped quotes + /(?:\"(?:\\\"|(?!\").)*\")/ reserved: 'int' | 'double' | 'short' | 'volatile' | 'register' | 'float' | 'signed'