Here's a draft that uses ;:

https://gist.github.com/rdm/8380234

(As an aside, perhaps this thread should be on programming? Or at
least, something to think about for next time...)

Note that I get different character counts than you. Maybe I
misunderstood what you intended to count?

Let me know if you want me to clarify or rewrite any of that.

But, briefly, I am using the final states from a ;: trace to mark the
end of each "token" and then classifying the text based on that
analysis. Since this sequential machine is a bit bulky, I decided to
write a small application to build it rather than constructing it by
hand. Since I only care about the state trace, I use no-op for all
operations. Since I want the end state, I use 0 _1 0 0 for ijrd
instead of the default 0 _1 0 _1. This leaves me with my final state
being the "character position" after the last character in text (and
it's reported in the trace rather than being an error condition).

Thanks,

-- 
Raul

On Sat, Jan 11, 2014 at 4:47 PM, Joe Bogner <[email protected]> wrote:
> Thank you for the thoughts. You summarized it well.
>
> I don't need to worry about attributes on the script tag for this use case.
> I am interested in quantifying how much embedded javascript is in each of
> the pages. I don't need to quantify external scripts. I know the code base
> doesnt use the type="javascript" attribute
>
> The braces should be well formed otherwise the c# razor file wouldn't
> compile. It is possible there may be an edgecase which can be found when I
> run it against all the files.
>
> I plan to use it to identify areas to refactor in the javascript/c# razor
> code base and then watch it improve over time. I also thought it would be
> interesting to use a concise and expressive language, J, to measure the
> more verbose  code base. It doesn’t need to be precise in terms of
> characters. For example, it is ok if the script tag characters are counted
> as long as its consistent. I will be using it find large problem areas and
> then measure the improvement.
>
> I would be interested in seeing the sequential machine approach or any
> other more idiomatic method than mine. I am fairly satisfied with mine. It
> is fairly clear to me and can likely ne extended if needed. I am trying to
> use J more in my day to day and that would help me learn and hopefully
> would be an interesting example for others.
>
> Thanks again
> On Jan 11, 2014 4:11 PM, "Raul Miller" <[email protected]> wrote:
>
>> I think I see how I would do that with a sequential machine. Let me
>> know if you want a working example.
>>
>> Briefly, though, you seem to have three kinds of token pairs:
>>
>> @{   }
>> {  }
>> <script> </script>
>>
>> The ambiguity between the first two is problematic, in the context of
>> errors, but does not matter in well formed cases. A bigger problem in
>> the wild might be that you do not allow for attributes on the script
>> tag.
>>
>> Also, you care about the number of characters between <script>
>> </script> so those characters should be saved as "tokens" even if they
>> are not curly braces. You care about {} between both @{ } and <script>
>> </script> and outside them, and your implementation allows things like
>> @{ <script> } </script>.
>>
>> A full wart-for-wart compatible version would be painful to write. A
>> version which assumed well-formed cases would be much easier to write.
>> But before thinking about coding up an implementation it's probably
>> worth thinking about why you want to do this. The answer to that kind
>> of question can be really interesting and can help identify which
>> warts are unnecessary or possibly even detrimental.
>>
>> So, before I think any more about code, what are your thoughts on what
>> you want to accomplish?
>>
>> Thanks,
>>
>> --
>> Raul
>>
>>
>> On Sat, Jan 11, 2014 at 3:40 PM, Joe Bogner <[email protected]> wrote:
>> > I have about 300 code files (javascript and embedded code) that I want
>> > to collect some metrics on.  I've written the algorithm using an
>> > imperative style. I actually wrote it first in C# and translated to J
>> >
>> > Here is the code (posted a link for brevity):
>> >
>> > J version:
>> > https://gist.github.com/joebo/936ca5e2017c0a3b5c56
>> >
>> > C# version:
>> > https://gist.github.com/joebo/e7f8e3ca7bd21117e58d
>> >
>> > This is what it outputs
>> >
>> > calc''
>> > blocks 3
>> > max depth 2
>> > max block 113
>> > scripts 2
>> > max script 26
>> >
>> > Any suggestions on how to do it differently in J? I looked into the
>> > sequential machine some but couldn't figure out how to make it work
>> > (if it could) since my approach required knowledge of the brace depth.
>> >
>> > In terms of requirements:
>> > 1. Take a block of text
>> > 2. Identify the code blocks in the file (start with @{ and end with } )
>> > 3. Count the code blocks
>> > 4. Determine the max depth of the code block
>> > 5. Determine the max size of all the code blocks
>> > 6. Count the javascript blocks
>> > 7. Determine the max size of the javascript block
>> >
>> > Thanks for any feedback or input!
>> >
>> > Joe
>> > ----------------------------------------------------------------------
>> > For information about J forums see http://www.jsoftware.com/forums.htm
>> ----------------------------------------------------------------------
>> For information about J forums see http://www.jsoftware.com/forums.htm
>>
> ----------------------------------------------------------------------
> For information about J forums see http://www.jsoftware.com/forums.htm
----------------------------------------------------------------------
For information about J forums see http://www.jsoftware.com/forums.htm

Reply via email to