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
- 外观或下载ANTLR4 Tool em下载ANTLR,过程ANTLR工具本身
-
Depois执行o ANTLR4工具:
爪哇-罐〜/ Downloads / antlr-4.8完成.jar-包io.维波.教程.antlr4.generate src / main / antlr4 / io / vepo / tutorial / antlr4 / Generated / TestSuite.g4
Gerando usando o Maven
Usando o Mavenébem mais简单。 Crie seu arquivo.g4
没有类似的at pacotediretório。 通过示例,示例时间:
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,OenterSuite
oexitSuite
serã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