Compilador de sintaxe da Zexpressão + Interpreper, kernel de mecanismo de script
Explicação do sistema técnico:
- No sistema técnico de princípio de compilação, é necessário o pré -processamento antes do processamento do código textual. A sintaxe e a sintaxe de açúcar sobre os quais falamos são todos programas de pré -processamento
- Método lexical: o método lexical é classificar palavras -chave, números e símbolos de texto e, finalmente, formar uma árvore lexical e seguir estritamente o princípio do processamento seqüencial.
- Declaração: No código de pré -processamento, a parte da declaração é chamada de árvore de declaração. A árvore da declaração também se baseia no pré -processamento sequencial lexical, porque o pré -processamento lexical é um método simplificado.
- Sintaxe: Após o pré-processamento da declaração, processa as operações lógicas de linha única das expressões de código. Esta etapa é chamada de sintaxe. É tomado como compilador de sintaxe da Zexpression. É uma solução que eu deliberadamente retirei do compilador que escrevi uma vez. Pode ser distribuído e usado de forma independente, e pode ser praticamente usado em pré -processamento digital, imagens gráficas, computação científica e outros campos, e também pode ser usada como um meio de aprender a melhorar a si mesmo.
Ideia central
- A implementação da Zexpression adota o princípio da complexidade ponto a ponto e é escrita para resolver problemas do compilador. A complexidade é muito maior que a dos programas regulares. Por resolver o problema final, não há vulnerabilidades na estrutura de nomeação e heap do código, por isso é uma solução de intérprete sintático maduro.
Características da Zexpression
- Operação de atomização completa de uma etapa única
- Prioridade completa do símbolo pós-processamento
- Pode pré -processar erros literais e feedback onde o erro ocorre
- Método de redação de números naturais que podem identificar pontos flutuantes e números inteiros
- Support Function Chamadas
- Suportar sintaxe de script personalizado
- Processamento de prioridade do símbolo da Polônia inversa 2.0
- Suporta modelos Android e Apple de telefones celulares
- Demoção funcional completa, desempenho completo de desempenho e análise de avaliação de precisão
- Após a compilação, o código OP atomizado pode ser formado, que pode ser carregado e executado em alta velocidade através do fluxo sem restringir o tipo de CPU
- O OP Code Framework pode ser facilmente decodificado em códigos de máquina para ARMV7 ARMX64 X64 x86 e outras plataformas
- Suporte de expressão de matriz e vetorial
Suporte da plataforma, teste com Delphi 10.3 Atualização 2 e FPC 3.0.4
- Windows: Delphi-CrossSocket (C/S OK), Delphi-Diocp (C/S OK), Delphi-ICS (C/S OK), Delphi-Índia (C/S OK), Delphi+FPC Synapse (C/S OK)
- Android: Indy (C/S OK), CrossSocket (apenas cliente)
- Dispositivo iOS: Indy (C/S OK), CrossSocket (apenas cliente)
- IOS Simulaor: n/a
- OSX: Indy (C/S OK), ICS (não testado), CrossSocket (C/S OK)
- Ubuntu16.04 X64 Servidor: Indy (C/S OK), CrossSocket (C/S OK)
- Ubuntu18.04 x86+x64 Desktop: apenas fpc3.0.4 sinapse (c/s ok)
- Ubuntu18.04 x86+x64 servidor: apenas fpc3.0.4 sinapse (c/s ok)
- Ubuntu18.04 ARM32+servidor de néon de braço: apenas fpc3.0.4 sinapse (c/s ok)
- Ubuntu18.04 ARM32+ARM NEON Desktop: apenas FPC3.0.4 Compile OK, sem teste na execução.
- Ubuntu16.04 Mate ARM32 Desktop: Somente FPC3.0.4 Compile OK, teste passado
- Raspberry Pi 3 Debian Linux ARMV7 Desktop, apenas FPC 3.0.4, teste.
- Wince (Arm Eatbi Hard Flat), Windows 10 IoT, apenas FPC 3.3.1, teste passado.
Suporte de arquitetura da CPU, teste com Delphi 10.3 Atualização 2 e FPC 3.0.4
- MIPS (FPC-Little Endian), flutuação macia, passa de teste no qemu
- Intel X86 (FPC-X86), Float Soft
- Intel X86 (Delphi+FPC), Float Hard, 80386, Pentium, Pentium2, Pentium3, Pentium4, Pentiumm, CoreI, Coreavx, CoreAvx2
- Intel X64 (FPC-X86_64), Float Soft
- Intel X64 (Delphi+FPC), Hard Float, Athlon64, CoreI, CoreAvx, CoreAvx2
- Braço (fpc-arm32-eabi, flutuação suave): ARMV3, ARMV4, ARMV4T, ARMV5, ARMV5T, ARMV5TE, ARMV5TEJ
- ARM (FPC -art32-EABI, Float Hard): ARMV6, ARMV6K, ARMV6T2, ARMV6Z, ARMV6M, ARMV7, ARMV7A, ARMV7R, ARMV7M, ARMV7EM
- Braço (fpc-arm64-eabi, hard bloat): ARMV8, AARCH64
Atualizar log
2021-9-22
- A biblioteca NumberBase possui driver de Zexpression embutido. Para detalhes, consulte o serviço de variável de rede do ZCLOUD https://github.com/passbyyou888/zcloud
- Corrigido o problema em que o Opcache não foi inicializado
- Otimize o Opruntime
- Apoie Delphi 11
- Apoie o FPC para dispositivos IoT
2021-7
- Problemas de reconhecimento fixos, como a expressão do caractere-2.0e-3
- Corrigido a biblioteca opcode.pas devido à sensibilidade do caso e incompatível com Win/Linux
2020-3
- Adicionado informações de declaração à função de registro
- Corrija o símbolo pré -função -func (1+1)
- Corrigido o símbolo func (1+1) -1 após a função
2019-7
Suporte de expressão da 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
- Corrigido o bug após o codificação de Notas de estacionamento text
- Opcode adiciona tipo de retorno de chamada (consulte o suporte ao script na Chain Zai Toolchain)
2018-9-29
- Nova tecnologia: Tecnologia de sonda de texto adicionada: pode reduzir a complexidade da programação dos programas de formigas em 50%.
- Nova tecnologia: Personagem de caracteres de texto de caractere por caracteres melhora %500
- Multi-plataforma: suporta totalmente para vários sistemas de IoT e arquiteturas de hardware multiprocessador
- Nova demonstração: adicionou uma nova demonstração do FPC, que não usa funções anônimas
- Processo: Compatível com o suporte da IoT com base no FPC: da nomeação unificada subjacente e em larga escala é ajustada e nomeação. Esse ajuste afetará os detalhes do código de muitos projetos.
// 本项目中的回调分为3种
// call: 直接指针回调,fpc+delphi有效
// method: 方法回调,会继承一个方法宿主的地址,fpc+delphi有效
// proc: 匿名过程回调,只有delphi有效
// 如果本项调整对于改造现有工程有一定的工作量,请使用字符串批量处理工具
// 在任何有回调重载的地方,方法与函数,均需要在后缀曾加回调类型首字母说明
// 如
RunOp 变更为 RunOpP() // 后缀加P表示匿名类型回调
RunOp 变更为 RunOpM() // 后缀加M表示方法类型的回调
RunOp 变更为 RunOpC() // 后缀加C表示指针类型的回调
2018-7-6
- Corrigir significativamente as regras de nomeação da biblioteca subjacente
- Suporta a plataforma FPC/86/64, e todas as bibliotecas básicas suportam compilação e operação sem problemas no Linux.
- Suporte completo para o FPC Compiler 3.1.1
- Tamanho adicionado e suporte endiano
- Corrigido o problema de não se recusar a usar o INT64 para compilador FPC de 32 bits
- Corrigido o problema das exceções em strings em execução no Linux quando o FPC Compiler
- Ferramenta de pré-compilação de Pascal adicionada para padronizar o código Pascal em um caso unificado no estilo C, que é totalmente compatível com o mecanismo de nomes de arquivos sensíveis ao linux
2018-4-12
- Corrigido um bug fora dos limites no kernel: o sintoma desse bug é que ele é inacessível sem motivo e é difícil eliminar através da depuração normal. Este é um bug causado pela memória fora dos limites.
2018-3-1
- Adicionado uma função de comparação de cordas difusas (Smithwaterman) ao kernel TPascalstring, otimização e teste são concluídos
- Esse algoritmo pertence ao discurso da Wikipedia de Smith-Waterman, uma disciplina de engenharia genética biológica. https://en.wikipedia.org/wiki/smith%E2%80%93waterman_algorithm
2018-2-28
- Corrigir C Fapa Caractere BUF, graças ao AMU QQ345148965
- Altere a nomeação do parâmetro de Charpos para Coffset e adicione um modificador const
2018-2-26
- Corrigido o problema de não ser capaz de compilar usando o modo de liberação
- Corrigido o problema de corte e segmentação incorretos na Zexpression
- Melhore ligeiramente o desempenho de corte das sondas de caracteres (Splittoken, Splitchar)
- Como a camada subjacente reescreve uma trava atômica, o modificador embalado é adicionado antes de muitas declarações recordes
2018-2-25
- Adicionado suporte de símbolo de expressão personalizada
- Nova demonstração de símbolos de expressão personalizada
2018-2-25
- Corrigido o problema que os parâmetros de função aninhados não podem expandir a interface corretamente
- Corrigido o problema de que a sonda digital do mecanismo de análise não pode reconhecer números e funções naturais hexadecimais
- Adicionado um novo exemplo de demonstração para atribuição, incluindo declaração variável, multiplexação estática, multiplexação dinâmica, um total de trilogias. Por favor, estude -o mesmo na demonstração de exemplo.
- Corrigido o problema da união correspondente a string e número
- Suporta Código C Sintaxe 0x16-digit
2018-2-6
- Reescreva o kernel do analisador uma vez, suporta chamadas de função e, a partir de agora, a Zexpression será atualizada continuamente
Se você tiver alguma dúvida sobre o uso do Zexpression, adicione o Grupo QQ de Aid Mútuo 490269542, não entre em contato diretamente com o autor
Por.qq600585 2017-6