LINUX.ORG.RU

Помогите придумать regex попроще


0

0

Пишу в flex анализатор для дальнейшего использования с
Berkeley YACC (выходной продукт - упрощённый интерпретатор Perl).

Помогите, please, придумать регулярные выражения для идентификатора
в Perl и для литерала (строка или число, включая все hex-/oct-
или научное предствления)! Я пробовал написать, но получилось
очень сложно.

P.S. Вот что у меня получилось (ну, {identifier} точно не работает)

letter              [a-zA-Z]
digit               [0-9]
sign                [+\-]?
special             [\`\!\#\%\&\-\=\'\<\/\,\:\[\{\(\?\~\@\$\^\*\+\|\"\>\\\.\;\]\}\)]

prefix              [\$\@\%]
identchar           [{letter}{digit}{special}]
num_oct             {sign}0{digit}+
num_hex             {sign}0?x{digit}+
num_dec             {sign}[1-9]{digit}+
num_bin             {sign}[01]+b

/* basic Perl items */
pfx_identifier      ({prefix}{identchar}+)
nopfx_identifier    ([{letter}_]{identchar}+)
identifier          {pfx_identifier} | {nopfx_identifier}
string_literal      (\'.*\') | (\".*\")
integer_literal     {num_oct} | {num_hex} | {num_dec} | {num_bin}
float_literal       {num_dec}(\.{digit}+)
...

мужик, ты текст дай котором вся эта шняга должна содержатся, а регексп для неё напишем канннить чтоб всю эту шнягу выдрать...

vilfred ☆☆
()
Ответ на: комментарий от Spectrum

cident [a-zA-Z_][a-zA-Z0-9_]+

may_be_perl  [$%@]({cident}|[/#$?])

возможно так..:) 

точные регеспы, не грех и в исходниках глянуть,
да и в сети должно быть

MKuznetsov ★★★★★
()
Ответ на: комментарий от MKuznetsov

Попробую, спасибо. А по поводу исходников Perl, там не используется Lex, а вручную написан конечный автомат.

Spectrum
() автор топика
Ответ на: комментарий от Spectrum

print $1 $2 $3 $4 $5 $6 if m{(\%fd).*?(D),(\$fx).*?(\$\/).*?(\$_3) (\$const)}

чото я ничо не понял, чесслово... ^(

vilfred ☆☆
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.