COMPILER DE SINTAXA DE ZEXPRESIÓN + intérprete, kernel de motor de script
Explicación del sistema técnico:
- En el principio técnico del principio de compilación, se requiere preprocesamiento antes de procesar el código textual. La sintaxis y el azúcar de sintaxis del que a menudo hablamos son todos programas de preprocesamiento
- Método léxico: el método léxico es clasificar las palabras clave, números y símbolos de texto, y finalmente formar un árbol léxico, y seguir estrictamente el principio del procesamiento secuencial.
- Declaración: En el código de preprocesamiento, la parte de la declaración se llama árbol de la declaración. El árbol de la declaración también se basa en el preprocesamiento secuencial léxico, porque el preprocesamiento léxico es un método simplificado.
- Sintaxis: después del preprocesamiento de la declaración, procesa las operaciones lógicas de una sola línea de expresiones de código. Este paso se llama sintaxis. Se toma como compilador de sintaxis de Zexpression. Es una solución que eliminé deliberadamente del compilador que una vez escribí. Se puede distribuir y usar de forma independiente, y se puede usar prácticamente en preprocesamiento digital, imágenes gráficas, computación científica y otros campos, y también se puede usar como un medio para aprender a mejorar.
Idea central
- La implementación de Zexpression adopta el principio de complejidad entre pares y se escribe para resolver problemas de compiladores. La complejidad es mucho más alta que la de los programas regulares. Debido a que resuelve el problema final, no hay vulnerabilidades en la estructura de nomenclatura y montón del código, por lo que es una solución de intérprete sintáctico maduro.
Características de Zexpression
- Operación completa de atomización de un solo paso
- Postprocesamiento de prioridad de símbolo completo
- ¿Pueden los errores literal y la retroalimentación del preprocesamiento donde ocurre el error?
- Método de escritura de números naturales que puede identificar puntos e enteros flotantes
- Llamadas a funciones de soporte
- Admitir sintaxis de script personalizado
- Procesamiento de prioridad del símbolo de Polonia Inversa 2.0
- Admite modelos de teléfonos móviles Android y Apple
- Demo funcional completo, rendimiento completo y marco de evaluación de precisión de análisis
- Después de la compilación, se puede formar código OP atomizado, que se puede cargar y ejecutar a alta velocidad a través de la corriente sin restringir el tipo de CPU
- El marco de código OP se puede decodificar fácilmente en códigos de máquina para ARMV7 ARMX64 X64 X86 y otras plataformas
- Soporte de expresión de matriz y vector
Soporte de plataforma, prueba con Delphi 10.3 Actualización 2 y FPC 3.0.4
- Windows: Delphi-Crosssocket (C/S OK), Delphi-Diocp (C/S OK), Delphi-Is (C/S OK), Delphi-Indy (C/S OK), Delphi+FPC Synapse (C/S OK)
- Android: Indy (C/S OK), Crosssocket (solo cliente)
- Dispositivo iOS: Indy (C/S OK), Crosssocket (solo cliente)
- IOS simulaor: n/a
- OSX: Indy (C/S OK), ICS (no probado), Crosssocket (C/S OK)
- Ubuntu16.04 x64 servidor: Indy (C/S OK), Crosssocket (C/S OK)
- Ubuntu18.04 x86+x64 Escritorio: solo FPC3.0.4 Synapse (C/S OK)
- Ubuntu18.04 x86+x64 servidor: solo fpc3.0.4 sinapsis (C/s OK)
- Ubuntu18.04 ARM32+Arm Neon Server: solo FPC3.0.4 Synapse (C/S OK)
- Ubuntu18.04 ARM32+Arm Neon Desktop: Solo FPC3.0.4 compilar OK, sin prueba en ejecución.
- Ubuntu16.04 Mate Arm32 Desktop: Solo FPC3.0.4 compilar OK, prueba pasada
- Raspberry Pi 3 Debian Linux Armv7 Desktop, solo FPC 3.0.4, prueba pasada.
- WINCE (ARM EATBI DURO FLAT), Windows 10 IoT, solo FPC 3.3.1, prueba pasada.
Soporte de arquitectura de CPU, prueba con Delphi 10.3 Actualización 2 y FPC 3.0.4
- MIPS (FPC-Little Endian), flotante suave, prueba de prueba en QEMU
- Intel X86 (FPC-X86), Soft Float
- Intel X86 (Delphi+FPC), Hard Float, 80386, Pentium, Pentium2, Pentium3, Pentium4, Pentiumm, Corei, CoreAavx, CoreAavx2
- Intel X64 (FPC-X86_64), Soft Float
- Intel X64 (Delphi+FPC), Hard Float, Athlon64, Corei, CoreAavx, CoreAavx2
- ARM (FPC-ARM32-EABI, Soft Float): ARMV3, ARMV4, ARMV4T, ARMV5, ARMV5T, ARMV5TE, ARMV5TEJ
- ARM (FPC-ARM32-EABI, Flotación dura): ARMV6, ARMV6K, ARMV6T2, ARMV6Z, ARMV6M, ARMV7, ARMV7A, ARMV7R, ARMV7M, ARMV7EM
- ARM (FPC-ARM64-EABI, FLOAT DURO): ARMV8, AARCH64
Registro de actualizaciones
2021-9-22
- La biblioteca NumberBase tiene un controlador de Zexpression incorporado. Para más detalles, consulte el servicio de variable de red de ZCLOUD https://github.com/passbyyou888/zcloud
- Se solucionó el problema donde no se inicializó Opcache
- Optimizar Opruntime
- Apoyo a Delphi 11
- Soporte de FPC para dispositivos IoT
2021-7
- Problemas de reconocimiento fijos como la expresión del personaje-2.0e-3
- Se corrigió la biblioteca Opcode.pas debido a la sensibilidad de los casos e incompatible con Win/Linux
2020-3
- Información de declaración agregada a la función de registro
- Arregle el símbolo de prefunción -func (1+1)
- Se corrigió el símbolo func (1+1) -1 después de la función
2019-7
Soporte de expresión de matriz
// 构建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
- Se solucionó el error después de la codificación de notas de parada de texto
- OpCode agrega el tipo de devolución de llamada (consulte el soporte de script en la cadena de herramientas de Zai)
2018-9-29
- Nueva tecnología: Tecnología de la sonda de texto agregada: puede reducir la complejidad de programación de los programas de hormigas en un 50%.
- Nueva tecnología: el rendimiento de la rastreo de caracteres de texto de carácter por personaje mejora %500
- Multiplataforma: soporte totalmente para múltiples sistemas IoT y arquitecturas de hardware multiprocesador
- Nueva demostración: agregó una nueva demostración de FPC, que no utiliza funciones anónimas
- Proceso: Compatible con soporte de IoT basado en FPC: desde lo subyacente a los nombres unificados avanzados a gran escala se ajusta y nombra. Este ajuste afectará los detalles del código de muchos proyectos.
// 本项目中的回调分为3种
// call: 直接指针回调,fpc+delphi有效
// method: 方法回调,会继承一个方法宿主的地址,fpc+delphi有效
// proc: 匿名过程回调,只有delphi有效
// 如果本项调整对于改造现有工程有一定的工作量,请使用字符串批量处理工具
// 在任何有回调重载的地方,方法与函数,均需要在后缀曾加回调类型首字母说明
// 如
RunOp 变更为 RunOpP() // 后缀加P表示匿名类型回调
RunOp 变更为 RunOpM() // 后缀加M表示方法类型的回调
RunOp 变更为 RunOpC() // 后缀加C表示指针类型的回调
2018-7-6
- Corrija significativamente las reglas de nombres de la biblioteca subyacente
- Admite la plataforma FPC/86/64, y todas las bibliotecas básicas admiten compilación y operación sin problemas en Linux.
- Soporte completo para FPC Compiler 3.1.1
- Tamaño agregado y soporte de Endian
- Se solucionó el problema de no negarse a usar INT64 para el compilador FPC de 32 bits
- Se solucionó el problema de las excepciones en las cadenas que se ejecutan en Linux cuando el compilador FPC
- Herramienta de precompilación PASCAL agregada para estandarizar el código PASCAL en el estilo C de estilo C, que es totalmente compatible con el mecanismo de nombres de archivos sensibles a la caja de Linux
2018-4-12
- Se corrigió un error de memoria fuera de los límites en el núcleo: el síntoma de este error es que es inaccesible sin ninguna razón, y es difícil eliminar a través de la depuración normal. Este es un error causado por la memoria fuera de los límites.
2018-3-1
- Se agregó una función de comparación de cuerdas difusas (Smithwaterman) al núcleo tpascalstring, se completan la optimización y las pruebas
- Este algoritmo pertenece a la dirección de Wikipedia de Smith-Waterman, una disciplina de la ingeniería genética biológica. https://en.wikipedia.org/wiki/smith%E2%80%93waterman_algorithm
2018-2-28
- Fix C Escape Caracter Buf, gracias a AMU QQ345148965
- Cambie el nombre de parámetro de Charpos a Coffset y agregue un modificador constante
2018-2-26
- Se solucionó el problema de no poder compilar usando el modo de liberación
- Se solucionó el problema del corte incorrecto y la segmentación en zexpresión
- Mejorar ligeramente el rendimiento de corte de las sondas de personajes (Splittoken, Splitchar)
- Debido a que la capa subyacente reescribe un bloqueo atómico, el modificador empaquetado se agrega antes de muchas declaraciones de registro
2018-2-25
- Soporte de símbolo de expresión personalizado agregado
- Nueva demostración de símbolos de expresión personalizados
2018-2-25
- Se solucionó el problema de que los parámetros de la función anidada no pueden expandir la interfaz correctamente
- Se corrigió el problema de que la sonda digital del motor del análisis no puede reconocer números y funciones naturales hexadecimales
- Se agregó un nuevo ejemplo de demostración para la asignación, incluida la declaración variable, la multiplexación estática, la multiplexación dinámica, un total de trilogías. Por favor, estudíelo usted mismo en la demostración de ejemplo.
- Se solucionó el problema de la unión de coincidencia de cadenas y numéricos
- Admite el estilo del código C 0x16 dígitos sintaxis
2018-2-6
- Reescribir el kernel analizador una vez, admite llamadas de funciones, y de ahora en adelante, Zexpression se actualizará continuamente
Si tiene alguna pregunta sobre el uso de Zexpression, agregue el Grupo QQ Mutual Aid QQ 490269542, no se comunique directamente con el autor.
por.qq600585 2017-6