04-17.eri-test Como criar uma linguagem usando ANTLR4 e Java

Aodesenvolverqualquerferramenta,请使用esparverum解析器解析器。使用原则,可在任何情况下使用masdepoisvocêveráqueébemcomplicado。

问题的解决方案,是由无限可能解决的语言解决方案。

AntesdoParser

解析语言的先决条件是必要的。自然语言:自然语言。

解析器,解决了复杂的问题,解决了语言问题,正式的解决方案是queécadauma。

天然语言

Vamos primeiro iniciar pela que aprendemos primeiro。 天然语言(自然语言)和tan est esamos tentando ensinar para o meu filho de 1 ano e meio👶。 Devios a umaexposiçãoa telas,ele acabou desenvolvendo outras linguagens antes da qualseráa main em sua vida。 Elejácompreende oportuguês,compreende algumasmúsicas,consegue cantarolar 。。。。Masnãoconsegue falar ainda。 Sóo papai emamãe,mas aindanãoassocia a fala dele作为coisas。 Ele associa o som nosso作为coisas。 Bizarronão?

Mas essaéforma decompreensãonossa。 Temos的儿子,法拉斯,fonemas等。。。 Eles existem apesar dagramática。 一个语法服务的基础,服务于普通语言的社区。

自然的语言,存在于世界上的语言。 普通法的语法。

TemosinúmerasLinguagens Natural no mundo:

  • Música➡️Partituras
  • Fala➡️Português,Inglês,Espanhol等。。。。
  • UX➡️Aplicativo Mobile,Aplicativo Web等。。。

自然语言,乌干达自然形态分析Linguagem Naturaléqualquer formas desímbolosgerados e consumidor conscientemente por humanos

奇怪的军刀coma处理器uma Linguagem自然。 Procure por RNN ou LSTM

语言正式

阿普萨德乌萨尔(Upes)Linguagem Formal乌干达的完整成就Linguagem Natural。 Uma Linguagem正式的正式文件,Seja ele dar Ordens一口气,一口之字。

Agoranãosei sevocêpercebeu一个主要的区别:林瓜根斯·福尔迈斯(Linguagens Formais)

为Tecnologia奉献的食物,存在着巨大的区别吉马良斯·罗莎(GuimarãesRosa)dacomputação,pois Linguagens Formaisnãoaceitam neologismos。 可能会导致语言混乱或语言混乱。 Um compiladornãoentende aquilo queééado do ja j conhece。

Tá,e quaissãoas Linguagens Formais conhecidas:

  • C
  • C ++
  • 爪哇
  • XML格式
  • 操蛋!嗯dia aprenderei Brainfuck !!!

Segue o Hello World em脑干:

+[-[<<[+[--->]-[<<<]]]>>>-]>---->。。><<<<-<+。>>>>>.>.<<.<-

一种Necessidade

á,这是新星语言吗? 宝物,事发前的必要。 Eu acabei desenvolvendo uma em casa nosúltimosdias como umexercício。 一个必需品时代:em umareunião,Jodoter的todos odeia。

墨西哥JMeter时代的一个待办事项世界,巴西XML como语言和XML的语言,以及巴西睾丸睾丸的睾丸激素。

Entéoofiz esseexercício:乌干达的语言测试?

观察站:出于对睾丸语言的要求而超越了语言。 Mas poucas替补o que o JMeter faz ...

Criando o Parser

推荐给其他人,请推荐给我一个以英语为母语的人普通测试.

Imaginar

原始的uma语言语言正式的é虚构的grammaticabásica。

帕拉普通测试,欧洲联合王国想象力基金会:

  • A 套房:套房或套房。 服务como agrupamentológico。 Seria oCriarUsuário.
  • Ø:您可以在Teste参观,也可以参观。 执行命令,请求URI等

示范性的例子普通测试:

套件UserTest {
     HTTP CreateUser {
         网址:“ http://127.0.0.1”
         方法:“ POST”
         身体  : ”””
                    {
                        “ id”:123,
                        “ firstName”:“ John”,
                        “ lastName”:“ Doe”
                    }
                 “”
         断言responseCode等于200
     }
 }

Extrair

Imaginada agramática,épreciso Extrair dela algumasinformationações: 墨西哥和墨西哥. Para isso precisaremos de uma Linguagem Formal,e por isso escolheremos o ANTLR4. O ANTLR4 tem uma gramática própria onde o desenvolvedor pode declarar a gramática e o léxico da sua linguagem.

Léxico

墨西哥的Vamos definir grosseiramente o或Tokenização,可识别语言。

Assim podemos definir na nossa语言:

  • 保留字:套房断言
  • 标识符:服务于基本相同的元素
  • Número:sim,嗯número....
  • 字串:sim,uma字串...
  • MultilineString:字符串定义por“”e quenãonecessita逃脱.

Para definir um Token em ANTLR4, é preciso definir um identificar com letra maiúscula:

grammar Test套房;

STRING : DQUOTE (ESC | ~["\\])* DQUOTE;

VERB: 'Contains' | 'Equals';

IDENTIFIER: [A-Za-z] [._\-A-Za-z0-9]*;

NUMBER: '-'? INT '.' [0-9]+ EXP? | '-'? INT EXP | '-'? INT;

分段 DQUOTE: '"';

fragment ESC: '\\' (["\\/bfnrt] | UNICODE);

fragment UNICODE: 'u' HEX HEX HEX HEX;

fragment HEX: [0-9a-fA-F];

fragment INT: '0' | [1-9] [0-9]*; // no leading zeros

fragment EXP: [Ee] [+\-]? INT; // \- since - means "range" inside [...]

// Just ignore WhiteSpaces
WS: [ \t\r\n]+ -> skip;

Nagramáticaacima definimos apenas alguns代币。 观察存在的令牌和碎片。 没有ANTLR4,ofragment识别符的使用顺序和识别符的片段类似,正则表达式片段也是如此。

Sintático

将我的ANTLR4反射到我的手指上,作为草香。 No nosso caso iremos criar os seguintes valores:

  • 套房:套房和步骤
  • 步骤:Unisadebásica做测试
  • 属性:Um par de Chave / Valor
  • 断言:Um par de Chave / Valor
  • 值:属性值断言。

Cada regra dessa será uma Parser Rule na gramática do ANTLR4. Nadefiniçãodagramáticaelassãodiferenciadas pela primeira letra. Oéxicoémaiúscula,enquanto oSintáticoéminúsculo. 真核后肢.

Seféno como ficaria nossa 套房 definida:

grammar TestSuite;

套房:'Suite' IDENTIFIER '{'    (套房 | step)* '}'
;

step:IDENTIFIER IDENTIFIER '{'(assertion | attribute)* '}'
;

assertion: 'assert' IDENTIFIER VERB value;

attribute: IDENTIFIER ':' value;

value: NUMBER | STRING;

STRING : DQUOTE (ESC | ~["\\])* DQUOTE;

VERB: 'Contains' | 'Equals';

IDENTIFIER: [A-Za-z] [._\-A-Za-z0-9]*;

NUMBER: '-'? INT '.' [0-9]+ EXP? | '-'? INT EXP | '-'? INT;

fragment DQUOTE: '"';

fragment ESC: '\\' (["\\/bfnrt] | UNICODE);

fragment UNICODE: 'u' HEX HEX HEX HEX;

fragment HEX: [0-9a-fA-F];

fragment INT: '0' | [1-9] [0-9]*; // no leading zeros

fragment EXP: [Ee] [+\-]? INT; // \- since - means "range" inside [...]

// Just ignore WhiteSpaces
WS: [ \t\r\n]+ -> skip;

Gerando o Código

EssaGramáticanãoir sear自动上弦游戏,在此之前的所有动作。

Nesse ponto recomendo fortemente使用Maven para gerenciar或ANTLR4,还可以方便地进行配置。

手绘卡通可爱小动物素材免费下载觅知网...

Gerando Código Manualmente

  1. 外观或下载ANTLR4 Tool em下载ANTLR,过程ANTLR工具本身
  2. Depois执行o ANTLR4工具:

    爪哇-罐〜/ Downloads / antlr-4.8完成.jar-包io.维波.教程.antlr4.generate src / main / antlr4 / io / vepo / tutorial / antlr4 / Generated / TestSuite.g4
  3. 使用os arquivos gerados no seu projeto,遵循abaixo:
    Arquivos ANTLR4

Gerando usando o Maven

Usando o Mavenébem mais简单。 Crie seu arquivo.g4没有类似的at pacotediretório。 通过示例,示例时间:

ANTLR4 Gramática

E Depois配置插件或执行ANTLR4 em seupom.xml

<plugin><groupId>org.antlr</groupId><artifactId>antlr4-maven-plugin</artifactId><version>$ {version.antlr4}</version><configuration><arguments><argument>-包</argument><argument>io.vepo.tutorial.antlr4.generated</argument></arguments></configuration><executions><execution><goals><goal>antlr4</goal></goals></execution></executions>
</plugin>

Usando o Código Gerado

重做gerado,serápreciso apenas和uma classe。 Veja一个界面TestSuiteListener,以及处理过程中的回复和回复。 令牌的上下文关系。

Essesmétodossãochamados em ordem,assim para o exemplo abaixo,qualquer metodo do atributo网址塞拉·查马多·安特斯德方法e assim por diante。 Todos Como tem Apenas UM Suite,OenterSuiteoexitSuiteserãoo primeiro eúltimoa serem chamados。

套件UserTest {
     HTTP CreateUser {
         网址:“ http://127.0.0.1”
         方法:“ POST”
         身体  : ”””
                    {
                        “ id”:123,
                        “ firstName”:“ John”,
                        “ lastName”:“ Doe”
                    }
                 “”
         断言responseCode等于200
     }
 }

由fim,para transformar texto em Objetos,basta chamar o parser组成?

TestSuiteParser parser =  TestSuiteParser CommonTokenStream TestSuiteLexer字符流.fromString内容))));
ParseTreeWalker 沃克 =  ParseTreeWalker();
SuiteCreator 创作者 =  SuiteCreator();
沃克.步行(创作者, parser.套房());
Suite 套房 = 创作者.getTestSuite();

Conclusão

存在的问题,由语言和语言解决。 简而言之,它是JSON或XML vamos的复杂组成部分。

Para essassoluções,émaisfácilusar或ANTLR。 Assim criamos uma linguagem facilmente。

Recursos

Todo o código usado nesse post está disponível no repositório github.com/vepo/antlr4-post

Continuarei o desenvolvimento dessa tool em Plain Test github.com/vepo/plain-test. Qualquer ajudaébem Vinda....

from: https://dev.to//vepo/como-criar-uma-linguagem-usando-antlr4-e-java-56g2

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值