From: Philip C. <Phil.Cannata@Sun.COM> - 2009-12-31 05:58:21
|
Frank and Marc, thanks for your time. Let me explain a little bit what I'm trying to do. For teaching purposes, I like to teach my students to modify the grammar first before proceeding to the AST etc. So, with the small change to Python.g below I've gotten the following to be recognized: >>> a=111 >>> b=a+222 >>> SELECT * FROM emp WHERE x = b SELECT Statement is: SELECT * FROM emp, WHERE x = b but, I'd like to get it to print out: SELECT Statement is: SELECT * FROM emp, WHERE x = 333 by getting the value of "b" which I believe has already been parsed and turned into a real object and therefore has a value when I'm parsing the SELECT line. (i.e., I need something in place of $e.text). Here's the change to Python.g starting at line 568: //small_stmt: (expr_stmt | print_stmt | del_stmt | pass_stmt | flow_stmt | // import_stmt | global_stmt | exec_stmt | assert_stmt) small_stmt : expr_stmt | print_stmt | del_stmt | pass_stmt | flow_stmt | import_stmt | global_stmt | exec_stmt | assert_stmt | query_stmt ; //query_stmt: SELECT * FROM person WHERE x = value query_stmt : SELECT STAR CAPSFROM n1 = NAME ( WHERE n2 = NAME ASSIGN e = expr_stmt )? { System.out.println("SELECT Statement is: SELECT * FROM " + $n1.text + ", WHERE " + $n2.text + " = " + $e.text); } -> ^(SELECT<Pass>[$SELECT]) ; At 03:35 PM 12/30/2009, Frank Wierzbicki wrote: >On Wed, Dec 30, 2009 at 4:08 PM, Philip Cannata <Phi...@su...> wrote: > > Yes, but if I put it in Python.g at line 639 as follows: >Probably Python.g is not the place you want to be putting this, since >the x in "x = a + b" is only a symbol from the viewpoint of parsing >(which is all Python.g does). The way you get from source to >something at runtime goes roughly: > >Source --- (parse) ---> AST --- (compile) ---> Java bytecodes --- >(class loading) ---> real objects ready to run --- (interpreter) ---> >actual values like x = 333 > >-Frank |