4Test 스크립트를 Perl로 변환하고 싶습니다. 필자는 Perse에서 Parse :: RecDescent를 사용했지만 아직 작업에 압도 당하고있다. 다음은 그 예입니다.4Test에서 Perl로 구문 분석 및 변환
4Test의 예는 무엇인가 같다 :
ParseSMSPlans (STRING sDir)
{
STRING sFile;
STRING sDirSMSPlan = sDir + "sms_plans\";
STRING sDirPlan = sDir + "plan\";
STRING sDirDeal = sDir + "deal\";
STRING sDirProduct = sDir + "product\";
STRING sLine, sType, sName;
HFILE hIn;
FILEINFO fiFile;
LIST OF FILEINFO lfInfo = SYS_GetDirContents (sDirSMSPlan);
...
}
... 이 내 구문 분석 :: RecDescent 문법 그래서
my $grammar = q{
#-----------------identifiers and datatypes-------------------#
identifier : /[a-z]\w+/
binops : '+' | '-' | '/' | '*' | '%' | '**'
lbinops: '!' | '<' | '>' | '>='| '<='| '&&'| '||' | '=='
integer: /\d+/ {print "hello $item[-1]" if $::debugging;}
number : /(\d+|\d*\.\d+)/ {print "hello $item[-1]" if $::debugging;}
string : /"(([^"]*)(\\")?)*"/
operation : number binops number operation(s?)
datatype : /[a-zA-Z]\w*/
definition : datatype expression(s) #{print "hello $item[-1]" if $::debugging;}
|datatype expression(s) "=" expression(s) #{print "hello $item[-1] = $item[-2]" if $::debugging;}
statement : ifexp | elsexp | elseifexp |forexp | feachexp | whexp | swcexp
#------------------Expressed Values-----------------------------#
program : expression
expression : number {print $item[1] if $::debugging}
| integer
| assignment
| operation
| identifier binops expression
| number binops expression
#------------------Conditionals---------------------------------------#
ifexp : 'if' '(' expression(s) ')' '{' expression(s) '}' elsexp(?)
elsexp : 'else' '{' expression(s) '}'
elseifexp: 'else' 'if' '(' expression(s) ')' '{' expression(s) '}'
forexp : 'for' '(' expression ';' expression ';' expression ')' '{' expression(s) }'
| 'for' assignment 'to' number expression(s) | 'for' assignment 'to' number '{' expression(s) '}'
feachexp : 'for each' expression 'in' expression '{' expression(s) '}'
whexp : 'while' '(' expression ')' '{' expression(s) '}'
casest : 'case' expression(s /,/) ':'
swcexp : 'switch' identifier '{' casest(s) '}' expression(s) 'default'
assignment : identifier(s) '=' expression
};
, 난에 "$"를 추가 찾고 있어요 모든 변수 이름 및 데이터 유형 잘라 내기. 대부분의 경우 내 문법은 작동합니다. 아직 완전히 테스트되었지만, Parse :: RecDescent가 조금만 수행 되었기 때문에 나를 이해하기 까다로워요. 가장 좋은지 잘 모르겠습니다. 방법을 완료하십시오. 내 일은 ... 그 일로 가장 빠르다.
내 관심사는 누구나 PRD가 처리 할 수 있다고 생각하는지 여부입니다. 나는 그것을 묻습니다. 아니면 단순한 (복잡한) 정규 표현식으로 충분합니까? 나는 누군가가 이것에 제안 할 수 있던 무엇을 감사 할 것입니다.
Regexp :: Grammars를 보셨습니까? – Schwern
4test에 대한 완전한 통역이 필요합니까 아니면 몇 가지 스크립트 만 변환 하시겠습니까? – jjmerelo