📄 regexpparser.cpp
字号:
#include <QtCore>#include "node.h"#include "regexpparser.h"Node *RegExpParser::parse(const QString ®Exp){ 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 + -