Unsolved How to apply rules of grammar?
-
@Blaster said in How to apply rules of grammar?:
I was thinking of loading a file with the rules
without defining what the letter
I'm confused now...
let's say you have a UTF-8 text file (
rules.txt
) that contains:x xy
You can use
QString stringToTranslate("xyxyxx"); QFile rulesFile("rules.txt"); if(rulesFile.open(QFile::ReadOnly | QFile::Text)){ QTextStream rulesStream(&rulesFile); rulesStream.setCodec("UTF-8"); QString line; while (stream.readLineInto(&line)) stringToTranslate.replace(QRegularExpression("(?:"+QRegularExpression::escape(line)+")+",line); } qDebug() << "Translated String: "+stringToTranslate;
Is this what you wanted?
-
@VRonin
What I really want to know is how to make a regular expression that checks the multiple occurrence of any pattern, not including some specific character in the expression.
Something like, for example"x{2,}"
that would match any string containing 2 or more repeated characters regardless of the character
-
@Wieland
It is not grammar free of context, it is a gramática similar to the one of our languages -
Imagine the input is
xxxyxy
do you want the output to bexxy
orxy
? -
@VRonin
Just xy -
I know it's very inefficient but my brain can't optimise on Monday. At least it works:
QString removeDuplicates(QString source){ for(int matchLen = source.size()/2; matchLen>0;--matchLen){ for(int startOfset=0;(2*matchLen)+startOfset<=source.size();){ if(source.midRef(startOfset,matchLen)==source.midRef(matchLen+startOfset,matchLen)) source.remove(matchLen+startOfset,matchLen); else ++startOfset; } } return source; }
-
@VRonin
I appreciate the effort, but I need to avoid using functions and that's why I'm talking about regular expressions. The code before the last one helps a lot. -
@Blaster said in How to apply rules of grammar?:
but I need to avoid using functions
I'm confused... can I ask why?
The code before the last one helps a lot
QString stringToTranslate("zxxxyxyxyxxzz"); for(int matchLen = stringToTranslate.size()/2; matchLen>0;--matchLen){ for(int startOfset=0;(2*matchLen)+startOfset<=stringToTranslate.size();){ if(stringToTranslate.midRef(startOfset,matchLen)==stringToTranslate.midRef(matchLen+startOfset,matchLen)) stringToTranslate.remove(matchLen+startOfset,matchLen); else ++startOfset; } } qDebug() << "Translated String: "+stringToTranslate;
-
@VRonin
That helps, because I can put in the file all the combinations and then apply them to the string -
@Blaster said in How to apply rules of grammar?:
how to make a regular expression that checks the multiple occurrence of any pattern
@Blaster said in How to apply rules of grammar?:
because I can put in the file all the combinations and then apply them to the string
I'm totally lost now. If somebody else has ideas please step forward
-
@VRonin
Let's see, I am Cuban guy and my English is not very strong, I only defend a little.
I explain to you better so you understand.
I have an application in which it is necessary to apply certain rules, one of which I mentioned to you, that of the patterns. This application does not work only in a language and I need to make that the processing of the rules be independent of the language of the application, so I need the rules in a file to be able to make changes when you want to change in some rules or to be able to add a new rule without having to program again -
-
If I understand correctly you want a file containing all operations that should be done to the string (removing duplicates being just one of them).
If your rules can all be expressed in terms of regular expression replaces then it's fairly easy, for example the duplicates one would be:
(.+)\1+
otherwise you'll need to use some form of syntax. probably the most straightforward way is to express operations in terms of ECMAScript (JavaScript) functions and use Qt Script to run them
-
@JKSH said in How to apply rules of grammar?:
Hi @Blaster, I'll repeat @VRonin's question:
Why do you need to avoid using functions?
Because I will change the rules after finishing the application
-
@VRonin said in How to apply rules of grammar?:
If I understand correctly you want a file containing all operations that should be done to the string (removing duplicates being just one of them).
If your rules can all be expressed in terms of regular expression replaces then it's fairly easy, for example the duplicates one would be: (.+)\1
otherwise you'll need to use some form of syntax. probably the most straightforward way is to express operations in terms of ECMAScript (JavaScript) functions and use Qt Script to run themYes, you understood correctly.
That's what I'm talking about.