File: grammar

package info (click to toggle)
libmodule-extractuse-perl 0.343-1
  • links: PTS, VCS
  • area: main
  • in suites: bullseye, buster
  • size: 872 kB
  • sloc: perl: 11,270; makefile: 17
file content (124 lines) | stat: -rw-r--r-- 4,024 bytes parent folder | download | duplicates (3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
#-----------------------------------------------------------------
# Rules for use
#-----------------------------------------------------------------

token_use:		/\buse\s/ use_stuff /[;}]/
		{ $return=$item{use_stuff} }

use_stuff:	(base | parent | version | module)

base:		"base" import_list

parent:		"parent" import_list
		{ $return='parent'; $return.=' '.$item[2] if $item[2] !~ /^\s*-norequire\b/; }

module:		module_name module_more
		{ $return=$item{module_name} }

module_name: 	/[\w:]+/

module_more:	eos | version(?) var(?) import_list(?)

#-----------------------------------------------------------------
# Rules for require
#-----------------------------------------------------------------

token_require:	/\brequire\s/ require_stuff /[;}]/
		{ $return=$item{require_stuff} }

require_stuff:	(version | require_name | module)

require_name:	<perl_quotelike>
		{ my $name=$item[1][2];
		  return 1 if ($name=~/\.pl$/);
		  $name=~s(/)(::)g;
		  $name=~s/\.pm//;
		  $return=$name;
		}

#-----------------------------------------------------------------
# Rules for no
#-----------------------------------------------------------------

token_no:		/\bno\s/ no_stuff /[;}]/
		{ $return=$item{no_stuff} }

no_stuff:	(base | version | module)

#----------------------------------------------------------------
# Functions provided by Module::Runtime
#----------------------------------------------------------------

module_runtime_require_module:  ( 'Module::Runtime::require_module(' | /\brequire_module\(/ ) <perl_quotelike> ')'
                                { $return = $item[2][2] }

module_runtime_use_fcn:         ( 'use_module' | 'use_package_optimistically' )

module_runtime_version:         ',' /\s*/ version

module_runtime_use:             ( ( 'Module::Runtime::' module_runtime_use_fcn '(' ) | ( m/\b/ module_runtime_use_fcn '(' ) ) <perl_quotelike> module_runtime_version(?) ')'
                                { $return = $item[2][2] }

token_module_runtime:           module_runtime_require_module | module_runtime_use

#-----------------------------------------------------------------
# Functions provided by Class::Load
#-----------------------------------------------------------------

hash_pair: /\S+/ comma ( <perl_quotelike> | /[^\s,}]+/ )

comma_hash_pair: comma hash_pair

hashref:    '{' hash_pair comma_hash_pair(s?) '}'

comma_hashref:  comma hashref

class_load_functions:   'load_class' | 'try_load_class' | 'load_optional_class'

class_load:     ( ( 'Class::Load::' class_load_functions ) | ( /\b/ class_load_functions ) ) '(' <perl_quotelike> comma_hashref(?) ')'
                { $return = $item[3][2] }

first_existing_arg: <perl_quotelike> comma_hashref(?)
                    { $return = $item[1][2] }

comma_first_existing_arg:   comma first_existing_arg
                            { $return = $item{first_existing_arg} }

class_load_first_existing:  ( 'Class::Load::load_first_existing_class' | /\bload_first_existing_class/ ) '(' first_existing_arg comma_first_existing_arg(s?) ')'
                            { $return = $item{first_existing_arg};
                              $return .= " " . join(" ", @{$item{'comma_first_existing_arg(s?)'}}) if $item{'comma_first_existing_arg(s?)'};
                              1;
                            }

token_class_load:   class_load | class_load_first_existing

#-----------------------------------------------------------------
# General Rules
#-----------------------------------------------------------------

version:	/v?[\d\._]+/

eos:		{ $text=~/^[\s;]+$/ ? 1 : undef;}

var:        /\$[\w+]/

import_list:	/[(]?/
		list_item
		comma_list_item(s?)
		/[)]?/
		{ $return=$item[2];
		  $return.=" ".join(" ",@{$item[3]}) if $item[3];
		}
		|
		/[(]\s*[)]/      { $return='' }

list_item:	<perl_quotelike> { $return=$item[1][2] }
		|
		<perl_codeblock (){}[]> { $return=$item[1] }
		|
		/-?\w+/            { $return=$item[1] }

comma_list_item: comma list_item
		{ $return=$item{list_item} }

comma:		(',' | '=>')