|
i should have mentioned that i did try contacting him.
When I was growin' up, I was the smartest kid I knew. Maybe that was just because I didn't know that many kids. All I know is now I feel the opposite.
|
|
|
|
|
No need:
Quote:
The GOLD Freeware License Agreement
This software is provided 'as-is', without any expressed or implied warranty. In no event will the author(s) be held liable for any damages arising from the use of this software.
Permission is granted to anyone to use this software for any purpose. If you use this software in a product, an acknowledgment in the product documentation would be deeply appreciated but is not required.
In the case of the GOLD Parser Engine source code, permission is granted to anyone to alter it and redistribute it freely, subject to the following restrictions:
The origin of this software must not be misrepresented; you must not claim that you wrote the original software.
Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
This notice may not be removed or altered from any source distribution
So include the notices, add him to the "About" box, and thank him - and include a github link to your project if that's open as well.
Sent from my Amstrad PC 1640
Never throw anything away, Griff
Bad command or file name. Bad, bad command! Sit! Stay! Staaaay...
AntiTwitter: @DalekDave is now a follower!
|
|
|
|
|
i mean yeah, legally i'm within my rights or i wouldn't even be asking this. I just don't think this was what he intended.
still, you're right, I am on solid ground there. So why do I feel bad enough about it to ask the question?
Maybe a question for a shrink.
When I was growin' up, I was the smartest kid I knew. Maybe that was just because I didn't know that many kids. All I know is now I feel the opposite.
|
|
|
|
|
I think the fact that he licensed it the way he did was an invitation to use his stuff without worry.
|
|
|
|
|
yeah i know legally I'm in the clear. I was more just thinking it might be an a-hole move on my part - like i was taking advantage in order to undercut the other guy, even if that wasn't my intent.
i think after the responses here in their totality, I'm no longer worried about that. It was never about whether i had the right to do it though, or at least, that's not why i asked the question, if that makes sense.
best regards.
edit: woo, a local. I'm a seattle transplant. I moved about an hour north from there several years ago, but lived there for most of my adult life.
When I was growin' up, I was the smartest kid I knew. Maybe that was just because I didn't know that many kids. All I know is now I feel the opposite.
|
|
|
|
|
adding, now I have to write a gui so i can add an about box
When I was growin' up, I was the smartest kid I knew. Maybe that was just because I didn't know that many kids. All I know is now I feel the opposite.
|
|
|
|
|
I see nothing wrong with writing your own thing that happens to be able to read the input for someone else's product (if I understood it correctly). Isn't that called backwards compatibility? Backwards compatibility doesn't infer compatibility between your own versions only of an application.
If not backwards compatibility, then call it interoperability. That, too, is A Good Thing(tm). The way I see it, this is how great software behaves, and evolves.
|
|
|
|
|
fair enough. =) and thanks for your feedback
When I was growin' up, I was the smartest kid I knew. Maybe that was just because I didn't know that many kids. All I know is now I feel the opposite.
|
|
|
|
|
Griff has given you the official, formal answer ("Yes you can") but it's an interesting point and one we've stressed over, talked about, tried to systematise, and eventually have sort of thrown our hands in the air about:
Developers often add licences to their code without thinking it through.
Developer A writes the code and says "do with it as you would". Developer B uses the code and it triggers a supernova and sues Developer A. Developer A says 'but I said I'm not legally liable" and the courts say "that's great but that doesn't work in our country".
Developer A writes the code and says "do with it as you would". Developer B unashamedly uses the code to create a product that makes Developer B a billion dollars and more famous than Hugh Grant. Developer A gets upset.
My advice is: go by the letter of what the developer has offered, but we warned that if they have impinged someone's intellectual rights, or written code that's unsafe, or inadvertently cause you to break a law in Yakyakistan then you'll be the one responsible, not them. Having said that, if you know the code has been developed from scratch and there's no SuperNova API exposed then you're probably fine.
BUT: if you yourself release the code for others to use then spend the 5 mins thinking it through and choose wisely[^].
cheers
Chris Maunder
|
|
|
|
|
I love your answer despite it bringing me back to where I am basically at. Fortunately he lives or works out of san francisco or the greater bay area (his product is heavily branded with that and is named after the golden gate bridge i think)
So legally, I am clear. I just hope he doesn't dislike me for it.
I like his tool okay, but it's kind of limited, forces you to load a "compiled grammar" from a file, and is very VB centric (he wrote it in VB) despite it technically being able to render to many languages.
Plus his grammar syntax leaves a lot of room for improvement.
These limitations are why I don't use it. But it's a good product otherwise, and definitely a good piece of freeware.
It's not open source though, and that's disappointing. At least the latest rendition isn't still written in VB6!
When I was growin' up, I was the smartest kid I knew. Maybe that was just because I didn't know that many kids. All I know is now I feel the opposite.
|
|
|
|
|
His licence says
Quote: In the case of the GOLD Parser Engine source code, permission is granted to anyone to alter it and redistribute it freely, subject to the following restrictions:
The origin of this software must not be misrepresented; you must not claim that you wrote the original software.
Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
This notice may not be removed or altered from any source distribution
Which is open source by definition[^].
Use it! Add to it! Make it better! That's the whole point of sharing the code. We do as much as we can then we hope others take on the task and move it forward and years down the line it comes around and we end up downloading some awesome app that used my free code, your free code, and free code from a dozen other developers.
It's why I started CodeProject.
cheers
Chris Maunder
|
|
|
|
|
That's great in theory but he doesn't actually provide the source for it. I decompiled it, but it's obviously from VB.NET (you can always tell, even after it's been mangled to IL and back)
It doesn't matter, because I already have everything but the GUI.
And the main hangup on a gui is a syntax highlighting editor.
Which is a ton of work because you can't just subclass a richedit control. (i've tried)
there's a project here that has one, and maybe I'll use that.
but a gui isn't really on my priorities at the moment.
and I hate the idea of having to go all in on syntax highlighting like that. it's so much effort.
When I was growin' up, I was the smartest kid I knew. Maybe that was just because I didn't know that many kids. All I know is now I feel the opposite.
|
|
|
|
|
codewitch honey crisis wrote: That's great in theory but he doesn't actually provide the source for it.
The GOLD parsing engine was ported to C++ over 20 years ago and is available here: C++ Gold Parser Engine
Best Wishes,
-David Delaune
|
|
|
|
|
He has updated the codebase significantly since then but that's good to know.
When I was growin' up, I was the smartest kid I knew. Maybe that was just because I didn't know that many kids. All I know is now I feel the opposite.
|
|
|
|
|
Well,
There is a more recent C# port (appears to be 5.2.0) located here but I notice that the guy that uploaded it ... did not include a license.
Best Wishes,
-David Delaune
|
|
|
|
|
that's interesting. well, i've already made one, and there's really only so many ways to skin the LALR(1) cat, which is why my code works with his stuff pretty much out of the box.
When I was growin' up, I was the smartest kid I knew. Maybe that was just because I didn't know that many kids. All I know is now I feel the opposite.
|
|
|
|
|
Chris Maunder wrote: It's why I started CodeProject.
WHAT?
It wasn't for the fame, the money and the chicks?
Michael Martin
Australia
"I controlled my laughter and simple said "No,I am very busy,so I can't write any code for you". The moment they heard this all the smiling face turned into a sad looking face and one of them farted. So I had to leave the place as soon as possible."
- Mr.Prakash One Fine Saturday. 24/04/2004
|
|
|
|
|
They were just a bonus - it was pure altruism to start with!
Sent from my Amstrad PC 1640
Never throw anything away, Griff
Bad command or file name. Bad, bad command! Sit! Stay! Staaaay...
AntiTwitter: @DalekDave is now a follower!
|
|
|
|
|
I'm laughing a wry, hollow, laugh.
cheers
Chris Maunder
|
|
|
|
|
We all know about the CP Groupies.
That's why you keep running off back to Oz - exhaustion!
Sent from my Amstrad PC 1640
Never throw anything away, Griff
Bad command or file name. Bad, bad command! Sit! Stay! Staaaay...
AntiTwitter: @DalekDave is now a follower!
|
|
|
|
|
|
there will be no confusion about that. my project is entirely distinct, and if anything would just have an import feature. There is no cross-polination going on. It would be like Libre Office importing a word document.
When I was growin' up, I was the smartest kid I knew. Maybe that was just because I didn't know that many kids. All I know is now I feel the opposite.
|
|
|
|
|
Having been bitten by a similar disappearing parser generator in the past, I'd suggest you're doing people a service...
Personally, I moved over to ANTLR after that, but these days, I try to keep to parser combinator libraries - at least if I'm compiling from source, I can configure it easily & have got some chance of adding features and/or fixing bugs...
Java, Basic, who cares - it's all a bunch of tree-hugging hippy cr*p
|
|
|
|
|
i have a love/hate relationship with ANTLR.
Mostly, I love its parsing algorithm, but hate its grammar and just the "feel" of the tools. in terms of the tools probably all the java. java is always such a slug.
The grammar is the big deal for me though. Ugh i hated it. Programmar (also gone) had THE best parser and grammar format. It's only downside was it didn't generate code, and it was commercial, but it was brilliant.
It inspired the grammar format I use, which frankly, I think is better than anything else currently out there, if i do say so myself. I mean - it's clean, intuitive, supports all the nice little constructs, lets you shape the parse tree with it, has attributes, and lets you declare your terminals in A/EBNF or regex. without requiring a separate section for them in the grammar (though i generally segregate them for good practice)
/****************************************************************\
* ebnf.ebnf: a self describing grammar for describing grammars *
* by codewitch honey crisis, july 2019 *
\****************************************************************/
grammar<start>= productions;
//
// productions
//
// marking a non-terminal with collapse removes it from
// the tree and propagates its children to its parent
// marking a terminal with it similarly hides it from
// the result but not from the grammar, unlike hidden
//
productions<collapsed> = production productions | production;
production= identifier [ "<" attributes ">" ] "=" expressions ";";
//
// expressions
//
expressions<collapsed>= expression { "|" expression };
expression= { symbol };
symbol= literal | regex | identifier |
"(" expressions ")" |
"[" expressions "]" |
"{" expressions ("}"|"}+");
//
// attributes
//
// recognized attributes are hidden, collapsed, terminal, start,
// followsConflict (which can be "error", "first" or "last")
// and blockEnd (string)
attributes<collapsed>= attribute { "," attribute};
attribute<color="red">= identifier [ "=" attrvalue ];
attrvalue<color="orange">= literal | integer | identifier;
//
// terminals
//
literal= '"([^"\\]|\\.)*"';
regex= '\'([^\'\\]|\\.)*\'';
identifier= '[A-Z_a-z][\-0-9A-Z_a-z]*';
integer= '\-?[0-9]+';
// hide comments and whitespace
//
// if you mark a production with the terminal attribute, you
// can use ebnf to define it. Anything that's text or regex
// is automatically a terminal
whitespace<hidden,terminal>= {" "|"\v"|"\f"|"\t"|"\r"|"\n"}+; //'[ \v\f\t\r\n]+';
// single quotes denote regex. make sure to escape single
// quotes in the regex with \'
// attributes get passed through to the parser, and you can define your own
lineComment<hidden,color="green">= '//[^\n]*[\n]';
blockComment<hidden,blockEnd="*/",color="green">= "/*";
// defining these isn't required, but gives
// us better constant names
// double quotes denote a literal. the escapes are nearly the
// same as C#. \U and \x are not supported
or="|";
lt="<";
gt=">";
eq="=";
semi=";";
comma=",";
lparen="(";
rparen=")";
lbracket="[";
rbracket="]";
lbrace="{";
rbrace="}";
rbracePlus="}+";
When I was growin' up, I was the smartest kid I knew. Maybe that was just because I didn't know that many kids. All I know is now I feel the opposite.
|
|
|
|
|
I've been using PEG (Parsing Expression Grammars) recently - it's a bit different to EBNF & more oriented towards recursive descent parsers, but is quite nice. It doesn't have some niceties (such as case insensitive matching - although I would have thought that could be added easily enough).
The particular parser generator I've been using automates whitespace processing (see %whitespace ), necessitating token indicators (expressions surrouned by < and > ), and also allows productions to be marked as ignored (with a leading ~ ). It also has an online parser checker & processor, which has been useful - apart from when I found a pathological case in the generated code for the parser's grammar...
License <- LicenseTerm (EOL LicenseTerm)* EOL*
LicenseTerm <- SecretTerm / TimeTerm / LocationTerm / IdentityTerm
SecretTerm <- SECRET EQUAL < REST_OF_LINE >
REST_OF_LINE <- ( !EOL_C . )+
LocationTerm <- ANYWHERE / NodeTerm
NodeTerm <- NODE EQUAL NO_SPACE_STRING
IdentityTerm <- ANYONE / UserTerm / DomainTerm
UserTerm <- USER EQUAL NO_SPACE_STRING
DomainTerm <- DOMAIN EQUAL NO_SPACE_STRING
TimeTerm <- PerpetualTerm / ExpiryTerm
PerpetualTerm <- PERPETUAL
ExpiryTerm <- EXPIRY EQUAL ExpiryDate
ExpiryDate <- TermLength / EndDate
TermLength <- NATURAL TermUnit
TermUnit <- DAY_UNIT / WEEK_UNIT / MONTH_UNIT / YEAR_UNIT
WEEK_UNIT <- < [Ww][Ee][Ee][Kk] [Ss]? >
MONTH_UNIT <- < [Mm][Oo][Nn][Tt][Hh] [Ss]? >
DAY_UNIT <- < [Dd][Aa][Yy] [Ss]? >
YEAR_UNIT <- < [Yy][Ee][Aa][rR] [Ss]? >
EndDate <- ISO8601 / NamedDate
ISO8601 <- < ISOYEAR DASH ISOMONTH DASH ISODAY >
ISOYEAR <- DIGIT DIGIT DIGIT DIGIT
ISOMONTH <- DIGIT DIGIT
ISODAY <- DIGIT DIGIT
NamedDate <- DAY MonthName YEAR
MonthName <- JAN / FEB / MAR / APR / MAY / JUN / JUL / AUG / SEP / OCT / NOV / DEC
YEAR <- < DIGIT DIGIT DIGIT DIGIT >
JAN <- < [Jj][Aa][Nn] ( [Uu][Aa][Rr][Yy] )? >
FEB <- < [Ff][Ee][Bb] ( [Rr][Uu][Aa][Rr][Yy] )? >
MAR <- < [Mm][Aa][Rr] ( [Cc][Hh] )? >
APR <- < [Aa][Pp][Rr] ( [Ii][Ll] )? >
MAY <- < [Mm][Aa][Yy] >
JUN <- < [Jj][Uu][Nn] ( [Ee] )? >
JUL <- < [Jj][Uu][Ll] ( [Yy] )? >
AUG <- < [Aa][Uu][Gg] ( [Uu][Ss][Tt] )? >
SEP <- < [Ss][Ee][Pp] ( [Tt][Ee][Mm][Bb][Ee][Rr] )? >
OCT <- < [Oo][Cc][Tt] ( [Oo][Bb][Ee][Rr] )? >
NOV <- < [Nn][Oo][Vv] ( [Ee][Mm][Bb][Ee][Rr] )? >
DEC <- < [Dd][Ee][Cc] ( [Ee][Mm][Bb][Ee][Rr] )? >
DAY <- < DIGIT DIGIT? >
~DASH <- < '-' >
DIGIT <- [0-9]
~EQUAL <- < '=' >
NATURAL <- < DIGIT+ >
NO_SPACE_STRING <- < (![ \t\n\r] .)+ >
~ANYONE <- < [Aa][Nn][Yy][Oo][Nn][Ee] >
~ANYWHERE <- < [Aa][Nn][Yy][Ww][Hh][Ee][Rr][Ee] >
~NODE <- < [Nn][Oo][Dd][Ee] >
~DOMAIN <- < [Dd][Oo][Mm][Aa][Ii][Nn] >
~USER <- < [Uu][Ss][Ee][Rr] >
~EXPIRY <- < [Ee][Xx][Pp][Ii][Rr][Yy] >
~PERPETUAL <- < [Pp][Ee][Rr][Pp][Ee][Tt][Uu][Aa][Ll] >
~SECRET <- < [Ss][Ee][Cc][Rr][Ee][Tt] >
%whitespace <- [ \t]*
~EOL <- < EOL_C+ >
~EOL_C <- [\n\r]
Java, Basic, who cares - it's all a bunch of tree-hugging hippy cr*p
|
|
|
|
|