Third iteration of QMake parser, looking for a parser generator

Roberto Raggi roberto.raggi at gmail.com
Tue Jul 3 11:19:28 UTC 2007


Hi!

Il giorno 03/lug/07, alle ore 12:52, Andreas Pakulat ha scritto:
> Its not documented. Not at all. And no the .g file in it and the
> resulting code is no documentation that I can work with. Sorry, I  
> really
> looked into it and hoped it could be used, but thats not possible.

there is pretty much nothing to document. It's a plain standard LALR  
tool. So if you know LALR you know how to use QLALR :-) But I  
understand that you need an example :-) I tough that Qt Script (and  
QLALR) was enough.

I have attached a mini-c interpreter/compiler implemented using QLALR  
and LLVM (I did it in 2-3 hours, so don't expect too much).

you need LLVM 2 to compile minic. The parser is about ~800 loc. QLALR  
has two streams of code. The bit stream and the decl stream. If you  
want you can merge two stream using the directive (%merged_output  
filename), if you don't do that you need to assign file names to the  
streams (using the %decl and the %impl directive). You write to the  
bit stream using a  /. ./ block (or to the decl stream using /: :/ ).  
QLALR defines a few macros ($rule, $rule_number, $table, and  
$header). A macro can be used inside a stream block. For example,

TranslationUnit ::= ExternalDefinition ;
/.
case $rule_number: {
   TranslationUnitAST *ast = new TranslationUnitAST;
   ast->push_back(sym(1).ast_ast);
   sym(1).translation_unit_ast = ast;
   translation_unit = ast;
} break;
./

The rest of the input file is pretty much like bison. You declare  
tokens using %token, %nonassoc, %left, and %right. You declare rule  
using
LeftSymbol ::= This IS a RULE ;

you can also use : instead of ::=

>
>> I have to say that I'm not very familiar with cmake,
>
> Its about qmake, not cmake ;)
oops :-)

>
> Hand-written scanner: No, I don't have time for that, especially for
> qmake language.
>
write a scanner by hand is not a big deal, but I can understand why  
you want to use a generator. I like generators. It's only that for  
qmake it doesn't look like you really need one.

ciao robe

-------------- next part --------------
A non-text attachment was scrubbed...
Name: minic.tar.gz
Type: application/x-gzip
Size: 9915 bytes
Desc: not available
URL: <http://mail.kde.org/pipermail/kdevelop-devel/attachments/20070703/06e27683/attachment.gz>


More information about the KDevelop-devel mailing list