Warning, /kdevelop/kdevelop-pg-qt/kdev-pg/test/op2.g is written in an unsupported language. File is not indexed.

0001 [:
0002 #include <QString>
0003 #include <kdebug.h>
0004 :]
0005 
0006 %parserclass (public declaration)
0007 [:
0008 QString token(int pos = 1);
0009 :]
0010 
0011 %parser_bits_header "Op2tokenstream.h"
0012 
0013 %parserclass (protected declaration)
0014 [:
0015 void expectedSymbol(Op2::AstNode::AstNodeKind kind, const QString& name);
0016 void expectedToken(int kind, enum TokenType tok, const QString& name);
0017 :]
0018 
0019 %parserclass (private declaration)
0020 [:
0021 QHash<QString, uint> pre;
0022 QHash<QString, QPair<bool, uint> > post;
0023 QHash<QString, QPair<bool, uint> > bin;
0024 QHash<QString, QPair<QString, QPair<bool, uint> > > tern;
0025 QHash<QString, QString> paren;
0026 :]
0027 
0028 %token BR, PRE, POST, BIN, PAREN, TERN, LEFT, RIGHT, NUMBER, OPERATOR ;;
0029 
0030    (#line=line BR BR*)*
0031 -> document ;;
0032 
0033    ?(PRE [: op1 = token(); :] OPERATOR [: priority = token().toUInt(); :] NUMBER
0034       [: pre[op1] = priority; :]
0035  | POST [: op1 = token(); :] OPERATOR [: priority = token().toUInt(); :] NUMBER
0036       (LEFT [: isLeft = true; :] | RIGHT [: isLeft = false; :] | 0 [: isLeft = true; :] )
0037       [: post[op1] = qMakePair(isLeft, priority); :]
0038  | BIN [: op1 = token(); :] OPERATOR [: priority = token().toUInt(); :] NUMBER
0039       (LEFT [: isLeft = true; :] | RIGHT [: isLeft = false; :] )
0040       [: bin[op1] = qMakePair(isLeft, priority); :]
0041  | TERN [: op1 = token(); :] OPERATOR [: op2 = token(); :] OPERATOR [: priority = token().toUInt(); :] NUMBER
0042       (LEFT [: isLeft = true; :] | RIGHT [: isLeft = false; :] )
0043       [: tern[op1] = qMakePair(op2, qMakePair(isLeft, priority)); :]
0044  | PAREN [: op1 = token(); :] OPERATOR [: op2 = token(); :] OPERATOR
0045       [: paren[op1] = op2; :]
0046  | expr=expr)
0047 -> line [
0048   temporary variable isLeft: bool;
0049   temporary variable priority: uint;
0050   temporary variable op1: QString;
0051   temporary variable op2: QString;
0052 ] ;;
0053   
0054    NUMBER
0055 -> number ;;
0056 
0057 %< number
0058 %pre ?[: pre.contains(op = token()) :] OPERATOR %priority[: pre[op] :]
0059 %post ?[: post.contains(op = token()) :] OPERATOR %priority[: post[op].second :] %isLeft[: post[op].first :]
0060 %bin ?[: bin.contains(op = token()) :] OPERATOR %priority[: bin[op].second :] %isLeft[: bin[op].first :]
0061 %tern ?[: tern.contains(op = token()) :] OPERATOR ?[: tern[op].first == token() :] OPERATOR %priority[: tern[op].second.second :] %isLeft[: tern[op].second.first :]
0062 %paren ?[: paren.contains(op = token()) :] OPERATOR ?[: paren[op] == token() :] OPERATOR
0063 %> expr [
0064   temporary variable op: QString;
0065 ];;
0066 
0067 [:
0068 #include "Op2tokentext.h"
0069 
0070 namespace Op2
0071 {
0072 
0073 void Parser::expectedSymbol(Op2::AstNode::AstNodeKind kind, const QString& name) { kDebug() << "In AstNode " << kind << ": Expected symbol " << name << " Token: " << tokenText(yytoken) << "(" << yytoken << ", \"" << "\"). Position: " << tokenStream->index(); abort();  }
0074 void Parser::expectedToken(int kind, enum TokenType tok, const QString& name) { kDebug() << "Read Token: " << tokenText(kind) << "(" << kind << ", \"" << "\"). Expected token " << name << " (" << tok << ")"; abort(); }
0075 QString Parser::token(int pos)
0076 {
0077   return reinterpret_cast<Op2::TokenStream*>(tokenStream)
0078     ->tokenString(tokenStream->index() + pos - 2);
0079 }
0080 
0081 }
0082 :]