1
我想使用perl正則表達式去除函數中的外括號,但是我不能構造不干擾內括號的正則表達式。這裏有一個例子:Perl刪除外括號
void init(){
if(true){
//do something
}
}
到
void init()
if(true){
//do something
}
是有一個正則表達式可以做到這一點?
我想使用perl正則表達式去除函數中的外括號,但是我不能構造不干擾內括號的正則表達式。這裏有一個例子:Perl刪除外括號
void init(){
if(true){
//do something
}
}
到
void init()
if(true){
//do something
}
是有一個正則表達式可以做到這一點?
這就是:
my $s = "void init(){ if(true){ //do something }}";
$s =~ s/^([^{]+)\{(.*)\}([^{]*)$/$1$2$3/s;
print "$s\n";
寫的語言解析器。下面是使用Marpa::R2一個簡單的例子:
#!/usr/bin/perl
use warnings;
use strict;
use Marpa::R2;
my $input = << '__IN__';
void init(){
if(true){
//do something
}
}
__IN__
my $dsl = << '__DSL__';
:default ::= action => concat
lexeme default = latm => 1
FuncDef ::= type name Arglist ('{') Body ('}')
Arglist ::= '(' Args ')'
Args ::= Arg* separator => comma
Arg ::= type name
Body ::= Block+
Block ::= nonbrace
| '{' nonbrace '}'
nonbrace ~ [^{}]*
comma ~ ','
type ~ 'void'
name ~ [\w]+
space ~ [\s]+
:discard ~ space
__DSL__
sub concat { shift; join ' ', @_ }
my $grammar = 'Marpa::R2::Scanless::G'->new({ source => \$dsl });
my $value = $grammar->parse(\$input, { semantics_package => 'main' });
print $$value;
在FuncDef
的花括號括號,它告訴馬爾巴丟棄它們。
但是爲什麼?帶括號的版本非常清晰(尤其是對於較長的功能體)。出於好奇,這是什麼語言不需要圍繞函數定義使用大括號? – ThisSuitIsBlackNot
Text :: Balanced'extract_bracketed'但不幸的是,你必須將你的文本填充到多行字符串中。 – stevesliva
也許這是C-to-XS轉換器的一個步驟。 – mob