ok, you're first suggestion sounds similar to what I'm thinking: I'm
thinking about implementing a data structure that keeps track of the
separate local and global scope, and if you're within a local scope it
prevents you from writing to global(unless you explicitly mark a
variable as global), but let's you write to local unhindered.

On Oct 15, 2:46 am, "D.Hendriks (Dennis)" <[EMAIL PROTECTED]> wrote:
> Hello Alex,
>
> You could have Scope classes in your AST that define scoping. They contain
> a body and declarations/existing variables. When you 'render' a scope, you
> save the current variables and update the dictionary you have with the
> values
> of the variables in the scope. You render the scope (the dictionary contains
> the values of the variables in the scope). After you evaluated the body
> of the
> scope, you restore the dictionary for the scope variables.
>
> Another way to do it, is to create unique identifiers for all variables.
> You can
> then refer to variables by their unique identifiers, which means you no
> longer
> have problems with variables having the same name, as each variable has a
> unique number.
>
> Hope this helps,
> Dennis
>
> Alex_Gaynor wrote:
> >All of the code can be found 
> >here:http://github.com/alex/alex-s-language/tree/master
> >.  By "render" I meant execute the calculate method on each AST, as
> >you can see the method takes context, which is a dictionary mapping
> >names to values.  Than all name lookups occur within that dictionary.
> >I'm not sure if this is the best approach to name resolution.
>
> >Alex
>
> >On Oct 14, 2:23 am, "D.Hendriks (Dennis)" <[EMAIL PROTECTED]> wrote:
>
> >>Hello Alex,
>
> >>I'm not sure what you mean with 'render'? Anywhere we can see the code
> >>you currently have for function declarations and instantiations?
>
> >>Dennis
>
> >>Alex_Gaynor wrote:
>
> >>>I've made a lot of progress, specifically I've implemented if, elif,
> >>>and else statements(these were surprisingly easy), and now I've
> >>>implemented function definitions, which seem to work, the way I
> >>>implemented it was to render the asts with just the context they are
> >>>called with, however this prevents even basic things like recursion,
> >>>so my question, what would be the best way to implement scoping, my
> >>>goal is to just have global, and local scope.
>
> >>>On Oct 13, 3:10 pm, Alex_Gaynor <[EMAIL PROTECTED]> wrote:
>
> >>>>I've rewritten all my parse rules to be way more explicit and it's
> >>>>working way better now, thanks!  Which features to implement
> >>>>next... :P
>
> >>>>On Oct 13, 1:06 pm, Alex_Gaynor <[EMAIL PROTECTED]> wrote:
>
> >>>>>That type of thing is definately not meant to be allowed, I probably
> >>>>>need to review/rewrite the parse rules, as you're correct, the
> >>>>>currrent division of statements and expressions is ambigious at best,
> >>>>>and it's probably causing lots of problems that won't be obvious.
>
> >>>>>On Oct 13, 2:56 am, "D.Hendriks (Dennis)" <[EMAIL PROTECTED]> wrote:
>
> >>>>>>Hello Alex,
>
> >>>>>>>You could probably have seen this, if you would have called the
> >>>>>>>parse(...) function with debug=2 parameter. This outputs debugging
> >>>>>>>information during parsing. It shows the tokens scanned, parser
> >>>>>>>state, etc.
>
> >>>>>>This kind of output can still be useful. It gives you insight in what
> >>>>>>the parser is doing step by step. That, together with the generated
> >>>>>>parser.out file should give enough information to understand why it
> >>>>>>doesn't work the way you want it to work...
>
> >>>>>>One other thing, it looks to me like your syntax allows 'a < b += 5'. Is
> >>>>>>this what you want? Maybe statements and expressions should be
> >>>>>>separated completely?
>
> >>>>>>Dennis
>
> >>>>>>Alex_Gaynor wrote:
>
> >>>>>>>I've started to implement ASTs as an intermediate representation,
> >>>>>>>however I'm having a problem, I'm trying to do run this code:
> >>>>>>>http://dpaste.com/83715/andgettingthatoutput(thepaste has the
> >>>>>>>code I'm trying to run, the final result of the parse, and the
> >>>>>>>tokens).  My parse rules are here:
> >>>>>>>http://github.com/alex/alex-s-language/tree/local%2Fast/alexs_lang/pa...
> >>>>>>>(you can also see teh asts and token code as well).  The actual code
> >>>>>>>to  create that output is here:http://dpaste.com/83717/.  I'm a)
> >>>>>>>unsure of why I'm getting the synax error, it should parse fine, since
> >>>>>>>assignment is an epxression), and b) I want the result of
> >>>>>>>parser.parse() to be the complete ASTs, how would I set it up to
> >>>>>>>return the full tree.
>
> >>>>>>>On Oct 9, 9:05 am, Alex_Gaynor <[EMAIL PROTECTED]> wrote:
>
> >>>>>>>>Thanks, that makes sense, not sure how i missed that in the docs.  Now
> >>>>>>>>I just need to figure out the multiline/if statements.
>
> >>>>>>>>On Oct 9, 2:12 am, "D.Hendriks (Dennis)" <[EMAIL PROTECTED]> wrote:
>
> >>>>>>>>>Hello Alex,
>
> >>>>>>>>>both the t_AND and the t_NAME rule match the string 'and' (without 
> >>>>>>>>>the
> >>>>>>>>>quotes). Since t_AND was previously a string, and t_NAME a function,
> >>>>>>>>>t_NAME took precedence (seehttp://www.dabeaz.com/ply/ply.html, 
> >>>>>>>>>section
> >>>>>>>>>3.3). You now changed them to both be functions. Then the t_AND takes
> >>>>>>>>>precedence (it is first in the file). Anyway, the same section 3.3
> >>>>>>>>>explains you should not use rules for and/or etc, but include them in
> >>>>>>>>>the identifier rule (t_NAME in your case).
>
> >>>>>>>>>You could probably have seen this, if you would have called the
> >>>>>>>>>parse(...) function with debug=2 parameter. This outputs debugging
> >>>>>>>>>information during parsing. It shows the tokens scanned, parser 
> >>>>>>>>>state,
> >>>>>>>>>etc. You would have seen that it scans a NAME tokens instead of an 
> >>>>>>>>>AND
> >>>>>>>>>token...
>
> >>>>>>>>>Good luck,
> >>>>>>>>>Dennis
>
> >>>>>>>>>Alex_Gaynor wrote:
>
> >>>>>>>>>>I was able to fix the 'and' 'or' 'not' issue by turning their
> >>>>>>>>>>definitions into functions, instead of just strings, not sure why 
> >>>>>>>>>>that
> >>>>>>>>>>fixed it :/
>
> >>>>>>>>>>On Oct 7, 7:54 pm, Alex_Gaynor <[EMAIL PROTECTED]> wrote:
>
> >>>>>>>>>>>I was able to succesfully implement True and False by making them
> >>>>>>>>>>>tokens(I do want them to be reserved ala py3k), so thanks for the 
> >>>>>>>>>>>help
> >>>>>>>>>>>with that!  I am also looking over the things on indentation, 
> >>>>>>>>>>>although
> >>>>>>>>>>>I suspect that will be something that goes in later.  Right now I 
> >>>>>>>>>>>am
> >>>>>>>>>>>having some issue implementing 'and' 'or' and 'not'.  Right now I 
> >>>>>>>>>>>have
> >>>>>>>>>>>them implemented the same way I do other unary and binary operators
> >>>>>>>>>>>which I suspect isn't working.  Right now whenever I try True or
> >>>>>>>>>>>False, or not True, or True and False I get a syntax error, and I'm
> >>>>>>>>>>>not sure what causes this.  All my code is 
> >>>>>>>>>>>here:http://github.com/alex/alex-s-language/tree/master
>
> >>>>>>>>>>>On Oct 7, 6:59 pm, Bruce Frederiksen <[EMAIL PROTECTED]> wrote:
>
> >>>>>>>>>>>>If you make True/False tokens, that generally means that they are
> >>>>>>>>>>>>reserved words in your language.  That means that nobody can use 
> >>>>>>>>>>>>them
> >>>>>>>>>>>>for other purposes.
>
> >>>>>>>>>>>>If you want to let people use the words "True" and "False" for 
> >>>>>>>>>>>>other
> >>>>>>>>>>>>purposes, then you probably don't want them to be tokens.  In 
> >>>>>>>>>>>>this case,
> >>>>>>>>>>>>you will probably end up doing a lookup at runtime, which might 
> >>>>>>>>>>>>find
> >>>>>>>>>>>>some other value.
>
> >>>>>>>>>>>>In python 2.5, for example, you can use True and False for other 
> >>>>>>>>>>>>purposes:
>
> >>>>>>>>>>>>def False(): print "hi mom!"
>
> >>>>>>>>>>>>is OK.  But this becomes illegal in python 3.0.
>
> >>>>>>>>>>>>I've attached a scanner the does indenting ala python (i.e., the
> >>>>>>>>>>>>programmer can indent any amount so long as they line up).
>
> >>>>>>>>>>>>-bruce
>
> >>>>>>>>>>>>Alex_Gaynor wrote:
>
> >>>>>>>>>>>>>I'm looking to implement a boolean type in my language, where 
> >>>>>>>>>>>>>exactly
> >>>>>>>>>>>>>should I do this?  Should I make True and False both be tokens, 
> >>>>>>>>>>>>>and
> >>>>>>>>>>>>>just set t.value = True/False.  Or should the parser handle them?
>
> >>>>>>>>>>>>>Also, how would I go about implementing a language that uses 
> >>>>>>>>>>>>>indent/
> >>>>>>>>>>>>>dedent for blocks(ala python)?
>
> >>>>>>>>>>>>>Alex
>
> >>>>>>>>>>>>scanner.py
> >>>>>>>>>>>>19KViewDownload
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"ply-hack" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at 
http://groups.google.com/group/ply-hack?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to