⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 regexpparser.cpp

📁 Qt4的一些例子
💻 CPP
字号:
#include <QtCore>#include "node.h"#include "regexpparser.h"Node *RegExpParser::parse(const QString &regExp){    in = regExp;    pos = 0;    return parseRegExp();}Node *RegExpParser::parseRegExp(){    Node *node = new Node(Node::RegExp);    addChild(node, parseExpression());    return node;}Node *RegExpParser::parseExpression(){    Node *node = new Node(Node::Expression);    addChild(node, parseTerm());    while (addTerminal(node, "|"))        addChild(node, parseTerm());    return node;}Node *RegExpParser::parseTerm(){    Node *node = new Node(Node::Term);    while (pos < in.length() && in[pos] != '|' && in[pos] != ')')        addChild(node, parseFactor());    return node;}Node *RegExpParser::parseFactor(){    Node *node = new Node(Node::Factor);    addChild(node, parseAtom());    if (!addTerminal(node, "?")) {        if (!addTerminal(node, "*"))            addTerminal(node, "+");    }    return node;}Node *RegExpParser::parseAtom(){    Node *node = new Node(Node::Atom);    if (addTerminal(node, "(")) {        addChild(node, parseExpression());        addTerminal(node, ")");    } else {        QChar ch = in[pos];        if (ch == '\\') {            addTerminal(node, in.mid(pos, 2));        } else {            addTerminal(node, QString(ch));        }    }    return node;}void RegExpParser::addChild(Node *parent, Node *child){    parent->children += child;    parent->str += child->str;    child->parent = parent;}bool RegExpParser::addTerminal(Node *parent, const QString &str){    if (in.mid(pos, str.length()) == str) {        addChild(parent, new Node(Node::Terminal, str));        pos += str.length();        return true;    }    return false;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -