summaryrefslogtreecommitdiff
path: root/tools/tpg
diff options
context:
space:
mode:
authorLuis Ontanon <luis.ontanon@gmail.com>2005-09-28 01:06:39 +0000
committerLuis Ontanon <luis.ontanon@gmail.com>2005-09-28 01:06:39 +0000
commit217b73a0b1b8d9ccd7efce1dae9a7cd1be8cc990 (patch)
tree129d91e2e37f80e6d183296713d1a202a252b21c /tools/tpg
parent95d60cc7ead74e8252fb7af6888659d4f922cf25 (diff)
downloadwireshark-217b73a0b1b8d9ccd7efce1dae9a7cd1be8cc990.tar.gz
update tpg
tvbparse: - for tvbparse_until spend the target token even if it isn't included svn path=/trunk/; revision=16032
Diffstat (limited to 'tools/tpg')
-rw-r--r--tools/tpg/tpg.pl29
-rw-r--r--tools/tpg/tpg.yp30
2 files changed, 25 insertions, 34 deletions
diff --git a/tools/tpg/tpg.pl b/tools/tpg/tpg.pl
index 6c56815076..77cdf45ded 100644
--- a/tools/tpg/tpg.pl
+++ b/tools/tpg/tpg.pl
@@ -302,7 +302,7 @@ sub make_rule {
if (length $tree_code_body ) {
my $cb_name = ${$r}{before_cb_name} = "${$r}{name}\_before_cb";
- ${$r}{before_cb_code} = "static void $cb_name(void* tpg _U_, const void* wd _U_, struct _tvbparse_elem_t* elem _U_) {\n$tree_code_head\n$tree_code_body\n}";
+ ${$r}{before_cb_code} = "static void $cb_name(void* tpg _U_, const void* wd _U_, struct _tvbparse_elem_t* elem _U_) {\n\tproto_item* pi;\n$tree_code_head\n$tree_code_body\n}";
${$r}{code} .= $tree_code_after;
}
@@ -394,7 +394,7 @@ sub make_rule {
} elsif (${$r}{type} eq 'until') {
${$code} .= $indent ."tvbparse_until(0,$wd_data,$before_fn,$after_fn,\n";
$dd++;
- ${$code} .= $indent_more . make_rule(${$r}{subrule},$dd) . ", TRUE)";
+ ${$code} .= $indent_more . make_rule(${$r}{subrule},$dd) . ", FALSE)";
$dd--;
}
@@ -416,7 +416,7 @@ sub make_vars {
my $v = shift;
my $r = shift;
my $base = shift;
-
+
if (exists ${$r}{var}) {
${$v}{${$r}{var}} = $base;
}
@@ -454,7 +454,7 @@ sub make_tree_code {
if (exists ${$r}{tree}) {
$root_var = "root_$fieldname";
- ${$head} .= "\tproto_item* $root_var;\n";
+ ${$head} .= "\tproto_item* $root_var;\n\n";
${$body} .= "\t$root_var = ";
$ett_arr .= "\t&$proto_name\_hfis.ett_$fieldname,\\\n";
$ett_decl .= "\tguint ett_$fieldname; \n";
@@ -463,27 +463,32 @@ sub make_tree_code {
} else {
${$body} .= "\t";
}
+
if (${$f}{type} eq 'FT_STRING') {
- ${$body} .= "TPG_ADD_STRING(tpg,${$f}{vname},$elem);\n";
+ ${$body} .= "\tpi = TPG_ADD_STRING(tpg,${$f}{vname},$elem);\n";
} elsif (${$f}{type} =~ /^FT_UINT/) {
my $fieldvar = "tpg_uint_$fieldname";
${$head} .= "\tguint $fieldvar = TPG_UINT($elem);\n";
- ${$body} .= "TPG_ADD_UINT(tpg,${$f}{vname},$elem,$fieldvar);\n";
+ ${$body} .= "\tpi = TPG_ADD_UINT(tpg,${$f}{vname},$elem,$fieldvar);\n";
} elsif (${$f}{type} =~ /^FT_INT/) {
my $fieldvar = "tpg_int_$fieldname";
${$head} .= "\tgint $fieldvar = TPG_INT($elem);\n";
- ${$body} .= "TPG_ADD_INT(tpg,${$f}{vname},$elem,$fieldvar);\n";
+ ${$body} .= "\tpi = TPG_ADD_INT(tpg,${$f}{vname},$elem,$fieldvar);\n";
} elsif (${$f}{type} eq 'FT_IPV4') {
my $fieldvar = "tpg_ipv4_$fieldname";
${$head} .= "\tguint32 $fieldvar = TPG_IPV4($elem);\n";
- ${$body} .= "TPG_ADD_IPV4(tpg,${$f}{vname},$elem,$fieldvar);\n";
+ ${$body} .= "\tpi = TPG_ADD_IPV4(tpg,${$f}{vname},$elem,$fieldvar);\n";
} elsif (${$f}{type} eq 'FT_IPV6') {
my $fieldvar = "tpg_ipv6_$fieldname";
${$head} .= "\tguint8* $fieldvar = TPG_IPV6($elem);\n";
- ${$body} .= "TPG_ADD_IPV6(tpg,${$f}{vname},$elem,$fieldvar);\n";
+ ${$body} .= "\tpi = TPG_ADD_IPV6(tpg,${$f}{vname},$elem,$fieldvar);\n";
} else {
- ${$body} .= "TPG_ADD_TEXT(tpg,$elem);\n";
+ ${$body} .= "\tpi = TPG_ADD_TEXT(tpg,$elem);\n";
+ }
+
+ if (exists ${$r}{plain_text}) {
+ ${$body} .= "\tTPG_SET_TEXT(pi,$elem);\n"
}
if (exists ${$r}{tree}) {
@@ -525,10 +530,10 @@ sub tokenizer {
[ '([A-Z][A-Z0-9_]*)', sub { [ 'UPPERCASE', $_[0] ] }],
[ '([0-9]+|0x[0-9a-fA-F]+)', sub { [ 'NUMBER', $_[0] ] }],
[ '(\%\%[0-9]+\%\%)', \&c_code ],
- [ "('(\\\\'|[^'])*')", sub { [ 'SQUOTED', $_[0] ] }],
+ [ "'((\\\\'|[^'])*)'", sub { [ 'SQUOTED', $_[0] ] }],
[ '\[\^((\\\\\\]|[^\\]])*)\]', sub { [ 'NOTCHARS', $_[0] ] }],
[ '\[((\\\\\\]|[^\\]])*)\]', sub { [ 'CHARS', $_[0] ] }],
- [ '("(\\\\"|[^"])*")', sub { [ 'DQUOTED', $_[0] ] }],
+ [ '"((\\\\"|[^"])*)"', sub { [ 'DQUOTED', $_[0] ] }],
[ '(\%[a-z_]+|\%[A-Z][A-Z-]*|\=|\.\.\.|\.|\:|\;|\(|\)|\{|\}|\+|\*|\?|\<|\>|\|)', sub { [ $_[0], $_[0] ] }],
]
}
diff --git a/tools/tpg/tpg.yp b/tools/tpg/tpg.yp
index 81bcb4137b..d9282e9208 100644
--- a/tools/tpg/tpg.yp
+++ b/tools/tpg/tpg.yp
@@ -53,6 +53,7 @@ sub from_to {
sub chars_control {
$_ = $_[0];
s/([a-zA-Z0-9])-([a-zA-Z0-9])/from_to($1,$2)/ge;
+ s/"/\\"/g;
"\"$_\"";
}
@@ -71,24 +72,9 @@ statement:
rule_statement {
my $rulename = ${$_[1]}{name};
- if (exists ${${$parser_info}{rules}}{$rulename}) {
-
- my $rule = ${${$parser_info}{rules}}{$rulename};
- if (exists ${${$parser_info}{rules}}{root}) {
- # a root rule exists already add this to its subrules
- push @{${${$parser_info}{rules}}{subrules}}, $_[1];
- } else {
- # this rule becomes the first subrule of a choice
- ${${$parser_info}{rules}}{$rulename} = {
- root=>'',
- type=>'choice',
- subrules=>[$rule,\$_[1]],
- name=>${$_[1]}{name},
- }
- }
- } else {
- ${${$parser_info}{rules}}{$rulename} = $_[1];
- }
+ abort($_[0],"%rule $rulename already defined") if exists ${${$parser_info}{rules}}{$rulename};
+
+ ${${$parser_info}{rules}}{$rulename} = $_[1];
}
| parser_name_statement {
abort($_[0],"%parser_name already defined") if exists ${$parser_info}{name};
@@ -184,7 +170,7 @@ base_rule:
| until_rule
| CHARS {{control=>chars_control($_[1]),type=>'chars'}}
| NOTCHARS {{control=>chars_control($_[1]),type=>'not_chars'}}
- | DQUOTED {{control=>"$_[1]",type=>'string'}}
+ | DQUOTED {{control=>"\"$_[1]\"",type=>'string'}}
| SQUOTED {{control=>"\"$_[1]\"",type=>'caseless'}}
| LOWERCASE {{control=>$_[1],type=>'named'}}
;
@@ -277,7 +263,7 @@ value_string_items:
;
value_string_item:
- NUMBER QUOTED { [ $_[1], "\"$_[2]\"" ] }
+ NUMBER DQUOTED { [ $_[1], "\"$_[2]\"" ] }
;
static_field_statement:
@@ -290,7 +276,7 @@ static_field_statement:
field_name:
#empty {undef}
- | DQUOTED
+ | DQUOTED { "\"$_[1]\""}
;
field_type:
@@ -310,7 +296,7 @@ field_value_string:
field_description:
#empty {'""'}
- | SQUOTED
+ | SQUOTED { "\"$_[1]\""}
;
quoted: DQUOTED | SQUOTED ;