2013-04-24 3 views
3

를 사용하여 간단한 언어 평가 :분석과 내가 같은 간단한 언어가 JavaCC에

program => (statement)+ 
statement => (<main_keyword> | <idl> <idu>) <lparan> expression <rparan> <semicolon> 
expression => T(<plus> T)* 
T   => P(<multipliation>P)* 
P   => <idu> | <idl> <lparan> expression <rparan> | <number> 

그리고 인식 토큰 :

<main_keyword> -> "main" 
<idl>   -> (["a"-"z"])+ 
<idu>   -> (["A"-"Z"])+ 
<lparan>   -> "(" 
<rparan>   -> ")" 
<semicolon>  -> ";" 
<number>   -> (["0"-"9"])+ 
<plus>   -> "+" 
<multiplication> -> "*" 

I를 내가 같이 위의 구문 분석 CFG를 사용

funa X (X+3*funb(1)) ; 
funb Y (2*Y) ; 
main (2+func(func(1))) ; 
func A (funa(A)) ; 

을 위의 구문을 javaCC를 사용하여 구문 분석 할 수 있지만 구문 분석기를 사용하여 이러한 프로그램을 평가하는 방법은 없습니다. 위의 프로그램은 15로 평가됩니다. javaCC에서 구현하는 방법은 파서 프로덕션을 사용하는 것이 가능합니까? 기능은 호출 전이나 호출 후 어느 위치 에나 나타날 수 있습니다.

감사

답변

3

당신은 JavaCC에 당신 1에 대한 AST를 생성시키는, 당신이 나무를 산책하는 동안 다음 사용자 정의 노드를 작성하여이 작업을 수행 할 수 있습니다. 트리가 생성되면 루트 노드의 eval(...) 메소드를 호출하여 전체 표현식/트리를 평가합니다.

JavaCC에 + JJTree 간단한 식을 평가하는 방법의 데모 : http://www.cs.nmsu.edu/~rth/cs/cs471/InterpretersJavaCC.html

더 다양한 예제 포함 기능 : https://github.com/bkiers/Curta


1https://javacc.java.net/doc/JJTree.html