Well I tried in the past to use openqwaq , but what I learned from the
experience is that sometimes understanding others code can be even more
time consuming than remaking it yourself. I spent like an afternoon trying
to understand openqwaq before starting Ephestos from complete scratch.
Suffice to say that in another afternoon I had the prototype of Ephestos
working with the ability to send simple python strings to the cptyhon
interpreter to be execute by the time I was not even able to understand the
basic architecture of openqwaq.

The module you recommended alone contains like 11.000 lines of code. Thats
a lot of work to just read that code and I cant find any class named
CModel. In any case I like it that I started from scratch, I want to keep
my project small, light, well documented and super easy to hack. Even if
that means less features :)

Also the code is written for squeak not pharo. In any case I will need
someone like Thierry to guide me through the code and help me understand.
So its definitely not as simple as "hey I am going to use that code".

Executing python code with Ephestos is already possible and easy , my
problems now are a) converting from python to pharo types which is why I am
using SmaCC b) use of callbacks , which should be easy to do , so that
python code can call pharo code. In the future if socket are proven too
slow I may move my architecture into a shared DLL instead to make things
faster. But as far as using python code from pharo I am very close to
achieving my goal by the end of this year.

On Wed, Feb 11, 2015 at 4:40 PM, Sebastian Heidbrink <shei...@yahoo.de>
wrote:

>  Hi!
>
> Maybe you also want to have a look at
> http://www.squeaksource.com/openqwaq/
>
> There is a part PyBridge included. MAybe you can take some of the
> Smalltalk Python Cmodel classes from there.
>
> Sebastian
>
>
> Am 10.02.2015 um 23:24 schrieb kilon alios:
>
> Ok so after rereading the tutorial and testing again and again , I think I
> have finally managed to understand how SmaCC really works and I was
> succesful into converting simple python litsts to pharo arrays and ordered
> collections.
>
>  The tricky part now is to apply this knowledge to complex python types
> like multi dimensional lists, tuples and dictionaries. I understand that
> the visitor allows me to visit a specific object instances each time they
> are found in the AST . But because I want to walk the AST in order to build
> multi dimensional ordered collections I need something more, or maybe my
> understanding of the visitor pattern is flawed.
>
>  The problem I am having here is that each time I parse a python type
> that python type is not necessarily represented by different kind of node.
> For example whether its a list or a tuple or a dictionary the same class is
> used PyAtomNode. In order to differentiate between those diffirent python
> types PyAtomNode has instance variables for right and left bracket,
> parantheses, and curly. So my initial thinking is to check those instance
> variables to see if they are nil and from that I can conclude which python
> type I am parsing.
>
>  So I can preform simple ifs that check that the instance variable is Nil
> or not but the question is if my strategy is a good one or a bad one.
>
>  I could define my own syntax to simplify the AST tree including
> different nodes for different python types , because from the looks of it ,
> it seems it is a bit too verbose for my needs but On the other hand I am
> not so sure because in the future my needs may become more verbose too.
>
>  So I am very close and ready to create my full python types converter
> for pharo but I wanted some good advice before wasting time on something
> that is not efficient.
>
>
>  By the way Thierry I have to agree with you Smacc is a very capable
> parser, also I like the use of regex syntax, makes it uglier compared
> Pettit Parser but I prefer the compact regex syntax to having to define and
> browse tons of classes and send tons of messages. Also the Python support
> is very good and I am impressed how easily SmaCC can parse whole python
> applications since some of the test are very complex. Well done great work!
>
>
>
> On Sat, Jan 31, 2015 at 12:04 AM, kilon alios <kilon.al...@gmail.com>
> wrote:
>
>> thank for your congratulations, because at times I fear I ask too obvious
>> questions. I have to say I find this parsing very complex but very
>> fascinating too :) Time to experiment with the visitor.
>>
>> On Fri, Jan 30, 2015 at 11:49 PM, Thierry Goubier <
>> thierry.goub...@gmail.com> wrote:
>>
>>>
>>>
>>> 2015-01-30 14:04 GMT+01:00 kilon alios <kilon.al...@gmail.com>:
>>>
>>>> Ok thanks for the info, I am still however curious about these "tests"
>>>> are just tests (which may or may not happen) that determine the AST, for
>>>> example which node to use ?
>>>>
>>>
>>>  'tests' is just there because, in the grammar, there is this at a
>>> certain point:
>>>
>>> testlist:
>>>     test 'test' "," testlist
>>>     | test 'test' comma_opt
>>>     ;
>>>
>>>  I have named this use of test 'test', so SmaCC has deduced that
>>> testlist will be a list of test(s) nodes (or maybe other stuff such as
>>> atoms, depending on the productions for test).. so, SmaCC, in each rule
>>> where testlist is found, it will add a 'tests' instance variable.
>>>
>>>  So, basically, the grammar rules explain how each node can be
>>> decomposed in sub-nodes, and the additional annotations (the 'test' naming
>>> and the {{}} or {{}}) drive how the classes for the nodes you want to keep
>>> are generated. In that testlist case, no node will be generated, but
>>> everywhere testlist appear on the right of the rule, then it will add a
>>> 'tests' instance variable.
>>>
>>>
>>>>
>>>>  Or are they tests related to unit testing class PythonParserTests ?
>>>>
>>>
>>>  Not at all :)
>>>
>>>
>>>>
>>>>  Also you said I need to use the visitor created by PythonParser I
>>>> assume you mean PyRootNodeVisitor ? Just as it is explained in the AST
>>>> chapter of the documentation.
>>>>
>>>>  In my case this simple python list will need me to subclass it and
>>>> override method visitListmaker , the aListmaker passed as argument to the
>>>> method should I assume it is PyListmakerNode ?
>>>>
>>>
>>>  In my experience, what you need to do is you have a look at the ast
>>> generated and see if you can recognize the elements. From what I see in
>>> your simple example, the key to your list is that PyAtomNode instance with
>>> something in list. Once you have that, you know that you need to visit
>>> PyAtomNode (and check that it has the [ ] tokens).
>>>
>>>  Looking into what is listmaker in atom in the grammar (congratulations
>>> by the way, you have seen it :) ), you'll see that it creates a listmaker
>>> node only in the first case: test followed by a list_for, otherwise it
>>> falls back to testlist...
>>>
>>>  Thierry
>>>
>>>
>>>
>>>>
>>>> On Fri, Jan 30, 2015 at 10:50 AM, Thierry Goubier <
>>>> thierry.goub...@gmail.com> wrote:
>>>>
>>>>> Hi kilon,
>>>>>
>>>>> The tests instance variable is linked to the python grammar: top level
>>>>> items in an expression are probably tests, and, through the grammar, tests
>>>>> can be just atoms.
>>>>>
>>>>> So the tests instance variable doesn't means it is testing anything :)
>>>>>
>>>>> Thierry
>>>>> Le 30 janv. 2015 09:23, "kilon alios" <kilon.al...@gmail.com> a écrit
>>>>> :
>>>>>
>>>>>  Ok so I tried to parse a very simple list like
>>>>>>
>>>>>>  [ 67,12342,5 ]
>>>>>>
>>>>>>  using Parse and explore , I can find these number by following this
>>>>>> AST (for example 67)
>>>>>>
>>>>>>  PyFileInputNode>>statements: -> 1: PySimpleStmNode>>stmts: -> 1:
>>>>>> PyExprStmtNode>>tests: ->1: PyPowerNode>>atom: -> PyAtomNode>>list: -> 1:
>>>>>> PyPowerNode>>atom: -> PyPowerNode>>numberToken -> numberToken>>value -> 
>>>>>> 67
>>>>>>
>>>>>>  quite a structure, but the one thing I dont get is "tests" , why
>>>>>> "tests" ?
>>>>>>
>>>>>>  Does it tests something and if yes what ?
>>>>>>
>>>>>
>>>>
>>>
>>
>
>

Reply via email to