compilateur de syntaxe zexpression + interprète, noyau de moteur de script
Explication du système technique:
- Dans le système technique du principe de compilation, le prétraitement est requis avant de traiter le code textuel. La syntaxe et le sucre de syntaxe dont nous parlons souvent sont tous des programmes de prétraitement
- Méthode lexicale: la méthode lexicale consiste à classer les mots clés du texte, les nombres et les symboles, et enfin former un arbre lexical, et suivre strictement le principe du traitement séquentiel.
- Déclaration: Dans le code de prétraitement, la partie de déclaration est appelée l'arborescence de la déclaration. L'arbre de déclaration s'appuie également sur le prétraitement séquentiel lexical, car le prétraitement lexical est une méthode simplifiée.
- Syntaxe: Après le prétraitement de la déclaration, il traite les opérations logiques à une seule ligne des expressions de code. Cette étape est appelée syntaxe. Il est pris en tant que compilateur de syntaxe Zexpression. C'est une solution que j'ai délibérément éliminée du compilateur que j'ai écrit une fois. Il peut être distribué et utilisé indépendamment, et peut être pratiquement utilisé dans le prétraitement numérique, les images graphiques, l'informatique scientifique et d'autres domaines, et peut également être utilisé comme moyen d'apprendre à s'améliorer.
Idée de base
- La mise en œuvre de la zexpression adopte le principe de la complexité des pairs et est écrite pour résoudre les problèmes du compilateur. La complexité est beaucoup plus élevée que celle des programmes réguliers. Parce qu'il résout le problème final, il n'y a pas de vulnérabilités dans la structure de dénomination et de tas du code, il s'agit donc d'une solution d'interpréteur syntaxique mature.
Caractéristiques de la zexpression
- Opération d'atomisation complète en une seule étape
- Priorité de symbole complète post-traitement
- Peut prétraiter les erreurs littérales et les commentaires où l'erreur se produit
- Méthode d'écriture naturelle qui peut identifier les points flottants et les entiers
- Appels de fonction de support
- Prise en charge de la syntaxe du script personnalisé
- Pologne inverse 2.0 Traitement de priorité du symbole
- Prend en charge les modèles Android et Apple de téléphones mobiles
- Demo fonctionnel complet, cadre complet des performances et de la précision de l'analyse
- Après compilation, le code OP atomisé peut être formé, qui peut être chargé et exécuté à grande vitesse à travers le flux sans restreindre le type CPU
- OP Code Framework peut être facilement décodé en codes machine pour ARMV7 ARMX64 X64 X86 et d'autres plateformes
- Support d'expression matricielle et vectorielle
Prise en charge de la plate-forme, testez avec Delphi 10.3 Update 2 et FPC 3.0.4
- Windows: Delphi-CrossSocket (C / S OK), Delphi-diocp (C / S OK), Delphi-ICS (C / S OK), Delphi-Indy (C / S OK), Delphi + FPC Synapse (C / S OK)
- Android: Indy (C / S OK), Crossocket (seul client)
- Appareil iOS: Indy (C / S OK), CrossSocket (seul client)
- Simulaor iOS: N / A
- OSX: Indy (C / S OK), ICS (non testé), Crossocket (C / S OK)
- UBUNTU16.04 SERVICE X64: Indy (C / S OK), Crossocket (C / S OK)
- Ubuntu18.04 X86 + X64 Desktop: SEULEMENT FPC3.0.4 Synapse (C / S OK)
- Ubuntu18.04 X86 + X64 Server: SEULEMENT FPC3.0.4 Synapse (C / S OK)
- UBUNTU18.04 ARM32 + ARM SERVER DE NEON: SEULEMENT FPC3.0.4 Synapse (C / S OK)
- UBUNTU18.04 ARM32 + ARM BUREAUX DE NEON: SEULEMENT FPC3.0.4 Compiler OK, pas de test sur l'exécution.
- Ubuntu16.04 Mate ARM32 Desktop: Seulement FPC3.0.4 Compiler ok, le test passé
- Raspberry Pi 3 Debian Linux ARMV7 Desktop, seul FPC 3.0.4, test passé.
- Wince (ARM Eatbi Hard Flat), Windows 10 IoT, seulement FPC 3.3.1, test passé.
Prise en charge de l'architecture CPU, testez avec Delphi 10.3 Update 2 et FPC 3.0.4
- MIPS (FPC-Little Endian), flotteur doux, passez la passe sur QEMU
- Intel x86 (FPC-X86), flotteur doux
- Intel x86 (Delphi + FPC), Hard Float, 80386, Pentium, Pentium2, Pentium3, Pentium4, Pentiumm, Corei, Coreavx, CoreAvx2
- Intel x64 (FPC-X86_64), flotteur doux
- Intel x64 (Delphi + FPC), Hard Float, Athlon64, Corei, CoreAvx, Coreavx2
- ARM (fpc-arm32-eabi, flux doux): armv3, armv4, armv4t, armv5, armv5t, armv5te, armv5tej
- ARM (FPC-ARM32-EABI, Hard Float): ARMV6, ARMV6K, ARMV6T2, ARMV6Z, ARMV6M, ARMV7, ARMV7A, ARMV7R, ARMV7M, ARMV7EM
- ARM (FPC-ARM64-EABI, Hard Float): ARMV8, AARCH64
Mettre à jour le journal
2021-9-22
- La bibliothèque Numberbase a un pilote ZExpression intégré. Pour plus de détails, veuillez consulter le service de variable réseau de Zcloud https://github.com/passbyyou888/zcloud
- Correction du problème où Opcache n'a pas été initialisé
- Optimiser Opruntime
- Soutenir Delphi 11
- Prise en charge du FPC pour les appareils IoT
2021-7
- Problèmes de reconnaissance fixes tels que l'expression du caractère-2.0e-3
- Correction de la bibliothèque OPCode.pas en raison de la sensibilité des cas et incompatible avec Win / Linux
2020-3
- Ajout d'informations sur la déclaration à la fonction d'enregistrement
- Corrigez le symbole de préfonction -func (1 + 1)
- Correction du symbole func (1 + 1) -1 après la fonction
2019-77
Support d'expression matricielle
// 构建3*3的variant矩阵,使用c语法表达式
procedure MatrixExp ;
var
m: TExpressionValueMatrix;
begin
DoStatus( ' ' );
m := EvaluateExpressionMatrix( 3 , 3 ,
' "hello"+"-baby"/*备注:字符串联合*/,true,false, ' +
' 1+1,2+2,3+3, ' +
' 4*4,4*5,4*6 ' , tsC);
DoStatus(m);
end ;
// 构建variant向量数组,使用pascal语法表达式
procedure MatrixVec ;
var
v: TExpressionValueVector;
begin
DoStatus( ' ' );
v := EvaluateExpressionVector( ' 0.1*(0.1+max(0.15,0.11)){备注内容},1,2,3,4,5,6,7,8,9 ' , tsPascal);
DoStatus(v);
end ; 2019-4
- Correction du bogue après le codage des notes de texte
- Opcode ajoute le type de rappel (reportez-vous à la prise en charge du script dans la chaîne d'outils Zai)
2018-9-29
- Nouvelle technologie: technologie de sonde texte ajoutée: peut réduire la complexité de programmation des programmes de fourmis de 50%.
- Nouvelle technologie: les performances de la rampage des personnages de personnage de personnage s'améliorent% 500
- Multi-plate-forme: prise en charge entièrement pour plusieurs systèmes IoT et architectures matérielles multiprocesseurs
- Nouvelle démo: ajoutait une nouvelle démo FPC, qui n'utilise pas de fonctions anonymes
- Processus: Compatible avec le support IoT basé sur FPC: de la dénomination unifiée à grande échelle sous-jacente et à grande échelle est ajustée et la dénomination. Cet ajustement affectera les détails du code de nombreux projets.
// 本项目中的回调分为3种
// call: 直接指针回调,fpc+delphi有效
// method: 方法回调,会继承一个方法宿主的地址,fpc+delphi有效
// proc: 匿名过程回调,只有delphi有效
// 如果本项调整对于改造现有工程有一定的工作量,请使用字符串批量处理工具
// 在任何有回调重载的地方,方法与函数,均需要在后缀曾加回调类型首字母说明
// 如
RunOp 变更为 RunOpP() // 后缀加P表示匿名类型回调
RunOp 变更为 RunOpM() // 后缀加M表示方法类型的回调
RunOp 变更为 RunOpC() // 后缀加C表示指针类型的回调
2018-7-6
- Corrigez considérablement les règles de dénomination de la bibliothèque sous-jacente
- Prend en charge la plate-forme FPC / 86/64, et toutes les bibliothèques de base prennent en charge la compilation et le fonctionnement sans problème sous Linux.
- Prise en charge complète du compilateur FPC 3.1.1
- Taille ajoutée et support endian
- Correction du problème de ne pas refuser d'utiliser INT64 pour le compilateur FPC 32 bits
- Correction du problème des exceptions dans les chaînes fonctionnant sur Linux lorsque le compilateur FPC
- Ajout de l'outil de précompilation Pascal pour standardiser le code Pascal dans le cas de style C-style, qui est entièrement compatible avec le mécanisme de noms de fichiers sensibles à Linux
2018-4-12
- Correction d'un bug de la mémoire hors limites dans le noyau: le symptôme de ce bug est qu'il est inaccessible sans raison, et il est difficile d'éliminer grâce à un débogage normal. Il s'agit d'un bug causé par la mémoire hors limites.
2018-3-1
- Ajout d'une fonction de comparaison de chaînes floues (Smithwaterman) au noyau tpascalstring, l'optimisation et les tests sont terminés
- Cet algorithme appartient à l'adresse Wikipedia de Smith-Waterman, une discipline du génie génétique biologique. https://en.wikipedia.org/wiki/Smith%E2%80%93waterman_algorithme
2018-2-28
- Correction de personnage d'échappement Buf, grâce à AMU QQ345148965
- Modifiez la dénomination du paramètre de Charpos en Coffet et ajoutez un modificateur Const
2018-2-26
- Correction du problème de ne pas pouvoir compiler en utilisant le mode de libération
- Correction du problème de la coupe et de la segmentation incorrectes dans la zexpression
- Améliorez légèrement les performances de coupe des sondes de caractère (SplitToken, Splitchar)
- Parce que la couche sous-jacente réécrit un verrou atomique, le modificateur emballé est ajouté avant de nombreuses déclarations d'enregistrement
2018-2-25
- Support de symbole d'expression personnalisé ajouté
- Nouvelle démonstration de symboles d'expression personnalisés
2018-2-25
- Correction du problème que les paramètres de fonction imbriqués ne peuvent pas développer correctement l'interface
- Correction du problème que la sonde numérique du moteur d'analyse ne peut pas reconnaître les nombres et fonctions naturels hexadécimaux
- Ajout d'un nouvel exemple de démonstration pour l'attribution, y compris la déclaration variable, le multiplexage statique, le multiplexage dynamique, un total de trilogies. Veuillez l'étudier vous-même dans l'exemple de démonstration.
- Correction de la question de l'union de correspondance des cordes et des nombres
- Prise en charge la syntaxe du style C de code C 0x16
2018-2-6
- Réécrivez le noyau de l'analyseur une fois, prend en charge les appels de fonction, et à partir de maintenant, Zexpression sera mise à jour en continu
Si vous avez des questions sur l'utilisation de ZExpression, veuillez ajouter le groupe Mutual Aid QQ 490269542, veuillez ne pas contacter l'auteur directement
BY.QQ600585 2017-6