diff --git a/.gitignore b/.gitignore index 2037d7f4..b55f7165 100644 --- a/.gitignore +++ b/.gitignore @@ -77,6 +77,7 @@ node_modules !/grammar/rollup.config.js !/grammar/tsconfig.json !/grammar/.releaserc - +!/grammar/src/syntax.grammar.terms.d.ts +!/grammar/src/tokens.js diff --git a/grammar/src/index.ts b/grammar/src/index.ts index eb60d1c7..a7159dae 100644 --- a/grammar/src/index.ts +++ b/grammar/src/index.ts @@ -3,26 +3,35 @@ // SPDX-License-Identifier: AGPL-3.0-or-later import { parser } from "./syntax.grammar" -import { LRLanguage, LanguageSupport, indentNodeProp, foldNodeProp, foldInside, delimitedIndent } from "@codemirror/language" +import { LRLanguage, LanguageSupport, HighlightStyle, syntaxHighlighting } from "@codemirror/language" import { styleTags, tags as t } from "@lezer/highlight" import { completeFromList } from "@codemirror/autocomplete" +const syntax_colors = syntaxHighlighting( + HighlightStyle.define( + [ + { tag: t.heading, color: "purple" }, + { tag: t.heading1, color: "gray" }, + {tag: t.variableName, color: "red"}, + { tag: t.keyword, color: "green" }, + {tag: t.string, color: "blue"}, + {tag: t.lineComment, color: "gray"}, + {tag: t.heading2, color: "black"} + ], + { all: { color: "black" } } + ) + ); export const SlangroomLanguage = LRLanguage.define({ parser: parser.configure({ props: [ - indentNodeProp.add({ - Application: delimitedIndent({ closing: ")", align: false }) - }), - foldNodeProp.add({ - Application: foldInside - }), styleTags({ - Identifier: t.variableName, - WhenStatement: t.variableName, - ThenStatement: t.bool, - Rule: t.string, - StringLitteral: t.string, - LineComment: t.lineComment + "Given Then When and in inside If EndIf Foreach EndForeach" : t.variableName, + "have send open connect print output" : t.keyword, + "Rule VersionRule! UnknownIgnoreRule! GenericRule!": t.heading, + " Scenario ScenarioType/... ScenarioComment!": t.heading1, + "DbAction! EthereumAction! FsAction! GitAction! HelpersAction! HttpAction! JsonSchemaAction! OAuthAction! PocketbaseAction! QrCodeAction! RedisAction! ShellAction! TimestampAction! WalletAction! ZencodeAction!": t.heading2, + StringLiteral: t.string, + Comment: t.lineComment, }) ] }), @@ -31,7 +40,7 @@ export const SlangroomLanguage = LRLanguage.define({ } }) -export const ac = SlangroomLanguage.data.of({ +const ac = SlangroomLanguage.data.of({ autocomplete: completeFromList([ { label: "given", type: "keyword" }, { label: "then", type: "keyword" }, @@ -40,5 +49,5 @@ export const ac = SlangroomLanguage.data.of({ }) export function Slangroom() { - return new LanguageSupport(SlangroomLanguage, [ac]) + return new LanguageSupport(SlangroomLanguage, [syntax_colors, ac]) } diff --git a/grammar/src/syntax.grammar b/grammar/src/syntax.grammar index ca3b6007..bd7f7c08 100644 --- a/grammar/src/syntax.grammar +++ b/grammar/src/syntax.grammar @@ -3,21 +3,30 @@ // SPDX-License-Identifier: AGPL-3.0-or-later @top Statement { - ( RuleStatement? ScenarioStatement* RuleStatement? SlangroomStatement) + ( RuleStatement | ScenarioStatement | RuleStatement | SlangroomStatement | Comment )* +} + +Comment { + comment (newline+ |eof) } SlangroomStatement { - (GivenStatement | ThenStatement | ThenPrint | GivenHaveStatement | GivenName | WhenStatement | IfEndifStatement)* + (GivenStatement | ThenStatement | ThenPrint | GivenHaveStatement | GivenName | WhenStatement | IfEndifStatement |ForEachStatement) } RuleStatement { - kw<"Rule"> (VersionRule | UnknownIgnoreRule | GenericRule) + kw<"Rule"> (VersionRule | UnknownIgnoreRule | GenericRule) ( newline+ | eof ) } ScenarioStatement { - kw<"Scenario"> (StringLiteral| Identifier | Keywords) ":"? (Identifier | Keywords)* + kw<"Scenario"> ScenarioType ScenarioComment? ( newline+ | eof ) +} +ScenarioType { + (StringLiteral| Identifier | Keywords) +} +ScenarioComment { + ":" (Identifier | Keywords | StringLiteral)* } - VersionRule { kw<"version"> VersionNumber } @@ -35,50 +44,57 @@ VersionNumber { } @skip { - space | newline | comment + space } GivenStatement { kw<"Given"> kw<"I"> (DbStatement | EthereumStatement | FsStatement | GitStatement | HelpersStatement | HttpStatement | JsonSchemaStatement | OAuthStatement | PocketbaseStatement | QrCodeStatement | RedisStatement | ShellStatement | TimestampStatement | WalletStatement | ZencodeStatement) + ( newline+ | eof ) } ThenStatement { kw<"Then"> kw<"I"> (DbStatement | EthereumStatement | FsStatement | GitStatement | HelpersStatement | HttpStatement | JsonSchemaStatement | OAuthStatement | PocketbaseStatement | QrCodeStatement | RedisStatement | ShellStatement | TimestampStatement | WalletStatement | ZencodeStatement) + ( newline+ | eof ) } ThenPrint { - kw<"Then"> kw<"I">? kw<"print"> (StringLiteral | Identifier | Keywords)+ (kw<"I"> kw<"print"> (StringLiteral | Identifier | Keywords)+)* + kw<"Then"> kw<"I">? kw<"print"> (StringLiteral | Identifier | Keywords)+ (newline kw<"and"> +kw<"I"> kw<"print"> (StringLiteral | Identifier | Keywords)+)* ( newline+ | eof ) } GivenHaveStatement { kw<"Given"> kw<"that">? kw<"I"> kw<"have"> (kw<"a">? | kw<"my">? | kw<"the">?) kw<"valid">? StringLiteral kw<"named">? StringLiteral? (kw<"inside"> | kw<"in">)? kw<"named">? StringLiteral? - (kw <"and"> kw<"I"> kw<"have"> (kw<"a">? | kw<"my">?) kw<"valid">? StringLiteral kw<"named">? StringLiteral? (kw<"inside"> | kw<"in">)? kw<"named">? StringLiteral?)* + (newline* kw <"and"> kw<"I"> kw<"have"> (kw<"a">? | kw<"my">?) kw<"valid">? StringLiteral kw<"named">? StringLiteral? (kw<"inside"> | kw<"in">)? kw<"named">? StringLiteral?)* ( newline+ | eof ) } HaveStatement{ - kw<"and"> kw<"I"> kw<"have"> (kw<"a">? | kw<"my">?) kw<"valid">? StringLiteral kw<"named">? StringLiteral? (kw<"inside"> | kw<"in">)? kw<"named">? StringLiteral? + newline+ kw<"and"> kw<"I"> kw<"have"> (kw<"a">? | kw<"my">?) kw<"valid">? StringLiteral kw<"named">? StringLiteral? (kw<"inside"> | kw<"in">)? kw<"named">? StringLiteral? } GivenName { - (kw<"Given"> kw<"I"> kw<"am"> + ((kw<"Given"> kw<"I"> kw<"am"> (kw<"known"> kw<"as">)? StringLiteral) | (kw<"Given"> kw<"I">? kw<"my"> kw<"name"> kw<"is"> - (Identifier | Keywords | StringLiteral)+) (HaveStatement)* + (Identifier | Keywords | StringLiteral)+)) HaveStatement* ( newline+ | eof ) } WhenStatement { - kw<"When"> kw<"I"> (Identifier | Keywords | StringLiteral)+ (kw<"I"> (Identifier | Keywords | StringLiteral)+)* + kw<"When"> kw<"I"> (Identifier | Keywords | StringLiteral)+ (newline kw<"and"> kw<"I"> (Identifier | Keywords | StringLiteral)+)* (newline+ | eof) } IfEndifStatement{ - Condition+ (WhenStatement | ThenStatement | ThenPrint)* kw<"EndIf"> + Condition+ ( GivenStatement | WhenStatement | ThenStatement | ThenPrint)* kw<"EndIf"> ( newline+ | eof ) } Condition { - kw<"If"> kw<"I"> kw<"verify"> (Identifier | Keywords | StringLiteral)+ - } + kw<"If"> kw<"I"> kw<"verify"> (Identifier | Keywords | StringLiteral)+ ( newline+ | eof ) +} + +ForEachStatement { + kw<"Foreach"> (StringLiteral | Identifier | Keywords) (kw<"in"> | kw<"inside">) (StringLiteral | Identifier | Keywords)+ newline+ (GivenStatement | WhenStatement | ThenStatement | ThenPrint)* + kw<"EndForeach"> ( newline+ | eof ) +} // ===== Plugin-Specific Statements ===== @@ -420,15 +436,18 @@ Keywords { kw<"redis"> | kw<"delete"> | kw<"shell"> | kw<"fetch"> | kw<"local"> | kw<"timestamp"> | kw<"milliseconds"> | kw<"seconds"> | kw<"vc"> | kw<"sd"> | kw<"jwt"> | kw<"p-256"> | kw<"public"> | - kw<"pretty"> | kw<"print"> | kw<"zencode"> | kw<"output"> | kw<"is"> + kw<"pretty"> | kw<"print"> | kw<"zencode"> | kw<"output"> | kw<"is"> | + kw<"Given"> | kw<"Then"> | kw<"When"> | kw<"Rule"> | kw<"Scenario"> | kw<"If"> | kw<"EndIf"> | kw<"Foreach"> | kw<"EndForeach"> | kw<"I"> } @tokens { space { " " | "\t" } newline { "\n" | "\r\n" } - comment { "#" (![\n])* } + comment { "#" (![\n])*} StringLiteral { "'" (![\\\n'] | "\\" _)* "'" } symbols { $[a-zA-Z_] | "_" } Identifier { symbols+ Number* } Number { $[0-9]+ } } + +@external tokens token from "./tokens.js" { eof } diff --git a/grammar/src/syntax.grammar.terms.d.ts b/grammar/src/syntax.grammar.terms.d.ts new file mode 100644 index 00000000..6b4aa902 --- /dev/null +++ b/grammar/src/syntax.grammar.terms.d.ts @@ -0,0 +1,5 @@ +// SPDX-FileCopyrightText: 2024 Dyne.org foundation +// +// SPDX-License-Identifier: AGPL-3.0-or-later + +export const eof: number diff --git a/grammar/src/tokens.js b/grammar/src/tokens.js new file mode 100644 index 00000000..b0004332 --- /dev/null +++ b/grammar/src/tokens.js @@ -0,0 +1,15 @@ +// SPDX-FileCopyrightText: 2024 Dyne.org foundation +// +// SPDX-License-Identifier: AGPL-3.0-or-later + +import {ExternalTokenizer} from "@lezer/lr" +import { eof } from "./syntax.grammar.terms" + +export const token = new ExternalTokenizer( + (input) => { + if (input.next < 0) { + input.acceptToken(eof); + } + }, + { contextual: true, fallback: true } + ); diff --git a/grammar/test/cases.txt b/grammar/test/cases.txt index 51d801c2..85822463 100644 --- a/grammar/test/cases.txt +++ b/grammar/test/cases.txt @@ -17,9 +17,9 @@ Then print the 'result' ==> -Statement(RuleStatement(Rule,UnknownIgnoreRule(unknown,ignore)), SlangroomStatement(GivenStatement(Given,I,DbStatement(DbConnectAction(connect,to, StringLiteral, and, - DbSend(send, record, StringLiteral, and, DbSend(send, table StringLiteral, and,DbAction(read,the,record,of,the,table)))), and, SaveAction(output,into, StringLiteral))), - GivenHaveStatement(Given,I,have,a,StringLiteral,named,StringLiteral),ThenPrint(Then,print,Keywords(the),StringLiteral))) +Statement(RuleStatement(Rule,UnknownIgnoreRule(unknown,ignore)),SlangroomStatement(GivenStatement(Given,I,DbStatement(DbConnectAction(connect,to,StringLiteral,and, +DbSend(send,record,StringLiteral,and,DbSend(send,table,StringLiteral,and,DbAction(read,the,record,of,the,table)))),and,SaveAction(output,into,StringLiteral)))), +SlangroomStatement(GivenHaveStatement(Given,I,have,a,StringLiteral,named,StringLiteral)),SlangroomStatement(ThenPrint(Then,print,Keywords(the),StringLiteral))) #Ethereum complex example @@ -52,17 +52,20 @@ Then I connect to 'ethereum' and send transaction 'signed_ethereum_transaction' ==> -Statement(RuleStatement(Rule,UnknownIgnoreRule(unknown,ignore)),ScenarioStatement(Scenario,StringLiteral,Identifier,Identifier,Keywords(object),Identifier,Identifier), - SlangroomStatement(GivenStatement(Given,I,EthereumStatement(EthereumConnectAction(connect,to,StringLiteral,and,EthereumSend(send,address,StringLiteral,and, - EthereumAction(read,the,ethereum,nonce))),and,SaveAction(output,into,StringLiteral))),GivenStatement(Given,I, - EthereumStatement(EthereumConnectAction(connect,to,StringLiteral,and,EthereumAction(read,the,suggested,gas,price)),and,SaveAction(output,into,StringLiteral))), - GivenHaveStatement(Given,I,have,a,StringLiteral),GivenHaveStatement(Given,I,have,a,StringLiteral),GivenHaveStatement(Given,I,have,the,StringLiteral), - GivenHaveStatement(Given,I,have,a,StringLiteral,named,StringLiteral),GivenHaveStatement(Given,I,have,a,StringLiteral,named,StringLiteral),GivenHaveStatement(Given,I,have,a,StringLiteral), - WhenStatement(When,I,Keywords(create),Keywords(the),Keywords(ethereum),Keywords(transaction),Keywords(to),StringLiteral), - WhenStatement(When,I,Identifier,Keywords(the),Keywords(ethereum),Keywords(transaction),Keywords(to),Keywords(store),StringLiteral), - WhenStatement(When,I,Keywords(create),Keywords(the),Identifier,Keywords(ethereum),Keywords(transaction),Identifier,Identifier,StringLiteral), - ThenPrint(Then,print,Keywords(the),StringLiteral),ThenStatement(Then,I,EthereumStatement(EthereumConnectAction(connect,to,StringLiteral,and, - EthereumSend(send,transaction,StringLiteral,and,EthereumAction(read,the,ethereum,transaction,id,after,broadcast))),and,SaveAction(output,into,StringLiteral))))) +Statement(RuleStatement(Rule,UnknownIgnoreRule(unknown,ignore)),ScenarioStatement(Scenario,ScenarioType(StringLiteral),ScenarioComment(Identifier,Identifier,Keywords(object),Identifier,Identifier)), + SlangroomStatement(GivenStatement(Given,I,EthereumStatement(EthereumConnectAction(connect,to,StringLiteral,and,EthereumSend(send,address,StringLiteral,and,EthereumAction(read,the,ethereum,nonce))),and,SaveAction(output,into,StringLiteral)))), + SlangroomStatement(GivenStatement(Given,I,EthereumStatement(EthereumConnectAction(connect,to,StringLiteral,and,EthereumAction(read,the,suggested,gas,price)),and,SaveAction(output,into,StringLiteral)))),Comment, + SlangroomStatement(GivenHaveStatement(Given,I,have,a,StringLiteral)), + SlangroomStatement(GivenHaveStatement(Given,I,have,a,StringLiteral)),Comment, + SlangroomStatement(GivenHaveStatement(Given,I,have,the,StringLiteral)),Comment, + SlangroomStatement(GivenHaveStatement(Given,I,have,a,StringLiteral,named,StringLiteral)), + SlangroomStatement(GivenHaveStatement(Given,I,have,a,StringLiteral,named,StringLiteral)), + SlangroomStatement(GivenHaveStatement(Given,I,have,a,StringLiteral)),Comment, + SlangroomStatement(WhenStatement(When,I,Keywords(create),Keywords(the),Keywords(ethereum),Keywords(transaction),Keywords(to),StringLiteral)), + SlangroomStatement(WhenStatement(When,I,Identifier,Keywords(the),Keywords(ethereum),Keywords(transaction),Keywords(to),Keywords(store),StringLiteral)), + SlangroomStatement(WhenStatement(When,I,Keywords(create),Keywords(the),Identifier,Keywords(ethereum),Keywords(transaction),Identifier,Identifier,StringLiteral)), + SlangroomStatement(ThenPrint(Then,print,Keywords(the),StringLiteral)), + SlangroomStatement(ThenStatement(Then,I,EthereumStatement(EthereumConnectAction(connect,to,StringLiteral,and,EthereumSend(send,transaction,StringLiteral,and,EthereumAction(read,the,ethereum,transaction,id,after,broadcast))),and,SaveAction(output,into,StringLiteral))))) #Fs example @@ -74,9 +77,11 @@ Then print the 'file_path_1' ==> -Statement(RuleStatement(Rule,UnknownIgnoreRule(unknown,ignore)),SlangroomStatement(GivenStatement(Given,I,FsStatement(FsConnectAction(FsSend(send,path,StringLiteral,and, - FsAction(verify,file,exists))))),GivenStatement(Given,I,FsStatement(FsConnectAction(FsSend(send,path,StringLiteral,and,FsAction(verify,file,does,not,exist))))), - GivenHaveStatement(Given,I,have,a,StringLiteral,named,StringLiteral),ThenPrint(Then,print,Keywords(the),StringLiteral))) +Statement(RuleStatement(Rule,UnknownIgnoreRule(unknown,ignore)), + SlangroomStatement(GivenStatement(Given,I,FsStatement(FsConnectAction(FsSend(send,path,StringLiteral,and,FsAction(verify,file,exists)))))), + SlangroomStatement(GivenStatement(Given,I,FsStatement(FsConnectAction(FsSend(send,path,StringLiteral,and,FsAction(verify,file,does,not,exist)))))), + SlangroomStatement(GivenHaveStatement(Given,I,have,a,StringLiteral,named,StringLiteral)), + SlangroomStatement(ThenPrint(Then,print,Keywords(the),StringLiteral))) #Git example @@ -89,9 +94,11 @@ Then print the data ==> -Statement(RuleStatement(Rule,UnknownIgnoreRule(unknown,ignore)),SlangroomStatement(GivenStatement(Given,I,GitStatement(GitOpenOrConnectAction - (connect,to,StringLiteral,and,GitSend(send,path,StringLiteral,and,GitAction(clone,repository))))),GivenHaveStatement(Given,I,have,a,StringLiteral,named,StringLiteral), - ThenPrint(Then,print,Keywords(the),Keywords(data)))) +Statement(RuleStatement(Rule,UnknownIgnoreRule(unknown,ignore)), + SlangroomStatement(GivenStatement(Given,I,GitStatement(GitOpenOrConnectAction(connect,to,StringLiteral,and,GitSend(send,path,StringLiteral,and,GitAction(clone,repository)))))), + SlangroomStatement(GivenHaveStatement(Given,I,have,a,StringLiteral,named,StringLiteral)), + SlangroomStatement(ThenPrint(Then,print,Keywords(the),Keywords(data)))) + #Helpers example @@ -104,9 +111,11 @@ Then print the data ==> -Statement(RuleStatement(Rule,UnknownIgnoreRule(unknown,ignore)),SlangroomStatement(GivenStatement(Given,I,HelpersStatement(HelpersSend(send,array,StringLiteral,and, - HelpersSend(send,values,StringLiteral,and,HelpersAction(manipulate,and,concat))),and,SaveAction(output,into,StringLiteral))), - GivenHaveStatement(Given,I,have,a,StringLiteral,named,StringLiteral),ThenPrint(Then,print,Keywords(the),Keywords(data)))) +Statement(RuleStatement(Rule,UnknownIgnoreRule(unknown,ignore)), + SlangroomStatement(GivenStatement(Given,I,HelpersStatement(HelpersSend(send,array,StringLiteral,and,HelpersSend(send,values,StringLiteral,and,HelpersAction(manipulate,and,concat))), + and,SaveAction(output,into,StringLiteral)))), + SlangroomStatement(GivenHaveStatement(Given,I,have,a,StringLiteral,named,StringLiteral)), + SlangroomStatement(ThenPrint(Then,print,Keywords(the),Keywords(data)))) #Http example @@ -118,8 +127,11 @@ Then print the 'result' ==> -Statement(RuleStatement(Rule,UnknownIgnoreRule(unknown,ignore)),SlangroomStatement(GivenStatement(Given,I,HttpStatement(HttpConnectAction(connect,to,StringLiteral,and, - HttpAction(do,get)),and,SaveAction(output,into,StringLiteral))),GivenHaveStatement(Given,I,have,a,StringLiteral,named,StringLiteral),ThenPrint(Then,print,Keywords(the),StringLiteral))) +Statement(RuleStatement(Rule,UnknownIgnoreRule(unknown,ignore)), + SlangroomStatement(GivenStatement(Given,I,HttpStatement(HttpConnectAction(connect,to,StringLiteral,and,HttpAction(do,get)),and,SaveAction(output,into,StringLiteral)))), + SlangroomStatement(GivenHaveStatement(Given,I,have,a,StringLiteral,named,StringLiteral)), + SlangroomStatement(ThenPrint(Then,print,Keywords(the),StringLiteral))) + #Json-schema example @@ -132,9 +144,8 @@ Then print the 'result' ==> -Statement(RuleStatement(Rule,UnknownIgnoreRule(unknown,ignore)),SlangroomStatement(GivenStatement(Given,I,JsonSchemaStatement(JsonSchemaSend(send,json_data,StringLiteral,and, - JsonSchemaSend(send,json_schema,StringLiteral,and,JsonSchemaAction(validate,json))),and,SaveAction(output,into,StringLiteral))), - GivenHaveStatement(Given,I,have,a,StringLiteral,named,StringLiteral),ThenPrint(Then,print,Keywords(the),StringLiteral))) +Statement(RuleStatement(Rule,UnknownIgnoreRule(unknown,ignore)),SlangroomStatement(GivenStatement(Given,I,JsonSchemaStatement(JsonSchemaSend(send,json_data,StringLiteral,and,JsonSchemaSend(send,json_schema,StringLiteral,and,JsonSchemaAction(validate,json))),and,SaveAction(output,into,StringLiteral)))),SlangroomStatement(GivenHaveStatement(Given,I,have,a,StringLiteral,named,StringLiteral)),SlangroomStatement(ThenPrint(Then,print,Keywords(the),StringLiteral))) + #Oauth example @@ -153,12 +164,11 @@ Then I send request 'request' and send server_data 'server_data' and generate ac ==> -Statement(RuleStatement(Rule,UnknownIgnoreRule(unknown,ignore)),ScenarioStatement(Scenario,StringLiteral,Keywords(url),Identifier),SlangroomStatement( - GivenHaveStatement(Given,I,have,a,StringLiteral,named,StringLiteral),GivenHaveStatement(Given,I,have,a,StringLiteral,named,StringLiteral), - WhenStatement(When,I,Keywords(create),Keywords(the),Identifier,Keywords(get),Keywords(parameters),Keywords(from),StringLiteral,Identifier,Identifier,Identifier), - WhenStatement(When,I,Identifier,StringLiteral,Keywords(to),StringLiteral,Keywords(in),StringLiteral),ThenPrint(Then,print,Keywords(the),StringLiteral), - ThenStatement(Then,I,OAuthStatement(OAuthSend(send,request,StringLiteral,and,OAuthSend(send,server_data,StringLiteral,and,OAuthAction(generate,access,token))),and, - SaveAction(output,into,StringLiteral))))) +Statement(RuleStatement(Rule,UnknownIgnoreRule(unknown,ignore)),ScenarioStatement(Scenario,ScenarioType(StringLiteral),ScenarioComment(Keywords(url),Identifier)) + SlangroomStatement(GivenHaveStatement(Given,I,have,a,StringLiteral,named,StringLiteral)),SlangroomStatement(GivenHaveStatement(Given,I,have,a,StringLiteral,named,StringLiteral)), + SlangroomStatement(WhenStatement(When,I,Keywords(create),Keywords(the),Identifier,Keywords(get),Keywords(parameters),Keywords(from),StringLiteral,Identifier,Identifier,Identifier)), + SlangroomStatement(WhenStatement(When,I,Identifier,StringLiteral,Keywords(to),StringLiteral,Keywords(in),StringLiteral)),SlangroomStatement(ThenPrint(Then,print,Keywords(the),StringLiteral)), + SlangroomStatement(ThenStatement(Then,I,OAuthStatement(OAuthSend(send,request,StringLiteral,and,OAuthSend(send,server_data,StringLiteral,and,OAuthAction(generate,access,token))),and,SaveAction(output,into,StringLiteral))))) #Pocketbase example @@ -174,11 +184,11 @@ Then print the 'result' ==> -Statement(RuleStatement(Rule,UnknownIgnoreRule(unknown,ignore)),SlangroomStatement(GivenStatement(Given,I,PocketbaseStatement(PocketbaseConnectAction(connect,to,StringLiteral,and, - PocketbaseAction(start,pb,client)))),GivenStatement(Given,I,PocketbaseStatement(PocketbaseConnectAction(PocketbaseSend(send,my_credentials,StringLiteral,and, - PocketbaseAction(login))))),GivenStatement(Given,I,PocketbaseStatement(PocketbaseConnectAction(PocketbaseSend(send,create_parameters,StringLiteral,and, - PocketbaseSend(send,record_parameters,StringLiteral,and,PocketbaseAction(create,record)))),and,SaveAction(output,into,StringLiteral))), - GivenHaveStatement(Given,I,have,a,StringLiteral,named,StringLiteral),ThenPrint(Then,print,Keywords(the),StringLiteral))) +Statement(RuleStatement(Rule,UnknownIgnoreRule(unknown,ignore)),SlangroomStatement(GivenStatement(Given,I,PocketbaseStatement(PocketbaseConnectAction(connect,to,StringLiteral,and,PocketbaseAction(start,pb,client))))), + SlangroomStatement(GivenStatement(Given,I,PocketbaseStatement(PocketbaseConnectAction(PocketbaseSend(send,my_credentials,StringLiteral,and,PocketbaseAction(login)))))), + SlangroomStatement(GivenStatement(Given,I,PocketbaseStatement(PocketbaseConnectAction(PocketbaseSend(send,create_parameters,StringLiteral,and,PocketbaseSend(send,record_parameters,StringLiteral,and,PocketbaseAction(create,record)))),and,SaveAction(output,into,StringLiteral)))), + SlangroomStatement(GivenHaveStatement(Given,I,have,a,StringLiteral,named,StringLiteral)), + SlangroomStatement(ThenPrint(Then,print,Keywords(the),StringLiteral))) #Qrcode example @@ -191,9 +201,7 @@ Then print the 'result' ==> -Statement(RuleStatement(Rule,UnknownIgnoreRule(unknown,ignore)),SlangroomStatement(GivenStatement(Given,I,QrCodeStatement(QrCodeSend(send,text,StringLiteral,and, - QrCodeAction(create,qr,code)),and,SaveAction(output,into,StringLiteral))),GivenHaveStatement(Given,I,have,a,StringLiteral,named,StringLiteral), - ThenPrint(Then,print,Keywords(the),StringLiteral))) +Statement(RuleStatement(Rule,UnknownIgnoreRule(unknown,ignore)),SlangroomStatement(GivenStatement(Given,I,QrCodeStatement(QrCodeSend(send,text,StringLiteral,and,QrCodeAction(create,qr,code)),and,SaveAction(output,into,StringLiteral)))),SlangroomStatement(GivenHaveStatement(Given,I,have,a,StringLiteral,named,StringLiteral)),SlangroomStatement(ThenPrint(Then,print,Keywords(the),StringLiteral))) #Redis example @@ -206,9 +214,8 @@ Then print the 'result' ==> -Statement(RuleStatement(Rule,UnknownIgnoreRule(unknown,ignore)),SlangroomStatement(GivenStatement(Given,I,RedisStatement(RedisConnectAction(connect,to,StringLiteral,and, - RedisSend(send,key,StringLiteral,and,RedisAction(delete,key,from,redis))),and,SaveAction(output,into,StringLiteral))), - GivenHaveStatement(Given,I,have,a,StringLiteral,named,StringLiteral),ThenPrint(Then,print,Keywords(the),StringLiteral))) +Statement(RuleStatement(Rule,UnknownIgnoreRule(unknown,ignore)),SlangroomStatement(GivenStatement(Given,I,RedisStatement(RedisConnectAction(connect,to,StringLiteral,and,RedisSend(send,key,StringLiteral,and,RedisAction(delete,key,from,redis))),and,SaveAction(output,into,StringLiteral)))), + SlangroomStatement(GivenHaveStatement(Given,I,have,a,StringLiteral,named,StringLiteral)),SlangroomStatement(ThenPrint(Then,print,Keywords(the),StringLiteral))) #Shell example @@ -221,9 +228,8 @@ Then print the 'result' ==> -Statement(RuleStatement(Rule,UnknownIgnoreRule(unknown,ignore)),SlangroomStatement(GivenStatement(Given,I,ShellStatement(ShellSend(send,command,StringLiteral,and, - ShellAction(execute,in,shell)),and,SaveAction(output,into,StringLiteral))),GivenHaveStatement(Given,I,have,a,StringLiteral,named,StringLiteral), - ThenPrint(Then,print,Keywords(the),StringLiteral))) +Statement(RuleStatement(Rule,UnknownIgnoreRule(unknown,ignore)),SlangroomStatement(GivenStatement(Given,I,ShellStatement(ShellSend(send,command,StringLiteral,and,ShellAction(execute,in,shell)),and,SaveAction(output,into,StringLiteral)))), + SlangroomStatement(GivenHaveStatement(Given,I,have,a,StringLiteral,named,StringLiteral)),SlangroomStatement(ThenPrint(Then,print,Keywords(the),StringLiteral))) #Timestamp example @@ -239,10 +245,10 @@ Then print the 'result_in_milliseconds' ==> -Statement(RuleStatement(Rule,UnknownIgnoreRule(unknown,ignore)),SlangroomStatement(GivenStatement(Given,I,TimestampStatement(TimestampAction(fetch,the,local,timestamp,in,seconds),and, - SaveAction(output,into,StringLiteral))),GivenStatement(Given,I,TimestampStatement(TimestampAction(fetch,the,local,timestamp,in,milliseconds),and,SaveAction(output,into,StringLiteral))), - GivenHaveStatement(Given,I,have,a,StringLiteral,named,StringLiteral),GivenHaveStatement(Given,I,have,a,StringLiteral,named,StringLiteral), - ThenPrint(Then,print,Keywords(the),StringLiteral),ThenPrint(Then,print,Keywords(the),StringLiteral))) +Statement(RuleStatement(Rule,UnknownIgnoreRule(unknown,ignore)),SlangroomStatement(GivenStatement(Given,I,TimestampStatement(TimestampAction(fetch,the,local,timestamp,in,seconds),and,SaveAction(output,into,StringLiteral)))), + SlangroomStatement(GivenStatement(Given,I,TimestampStatement(TimestampAction(fetch,the,local,timestamp,in,milliseconds),and,SaveAction(output,into,StringLiteral)))), + SlangroomStatement(GivenHaveStatement(Given,I,have,a,StringLiteral,named,StringLiteral)),SlangroomStatement(GivenHaveStatement(Given,I,have,a,StringLiteral,named,StringLiteral)), + SlangroomStatement(ThenPrint(Then,print,Keywords(the),StringLiteral)),SlangroomStatement(ThenPrint(Then,print,Keywords(the),StringLiteral))) @@ -257,9 +263,8 @@ Then print the 'result' ==> -Statement(RuleStatement(Rule,UnknownIgnoreRule(unknown,ignore)),SlangroomStatement(GivenStatement(Given,I,ZencodeStatement(ZencodeSend(send,keys,StringLiteral,and, - ZencodeSend(send,data,StringLiteral,and,ZencodeSend(send,script,StringLiteral,and,ZencodeAction(execute,zencode)))),and,SaveAction(output,into,StringLiteral))), - GivenHaveStatement(Given,I,have,a,StringLiteral,named,StringLiteral),ThenPrint(Then,print,Keywords(the),StringLiteral))) +Statement(RuleStatement(Rule,UnknownIgnoreRule(unknown,ignore)),SlangroomStatement(GivenStatement(Given,I,ZencodeStatement(ZencodeSend(send,keys,StringLiteral,and,ZencodeSend(send,data,StringLiteral,and,ZencodeSend(send,script,StringLiteral,and,ZencodeAction(execute,zencode)))),and,SaveAction(output,into,StringLiteral)))), + SlangroomStatement(GivenHaveStatement(Given,I,have,a,StringLiteral,named,StringLiteral)),SlangroomStatement(ThenPrint(Then,print,Keywords(the),StringLiteral))) #Test from Didroom 1 @@ -308,26 +313,32 @@ Then I send request 'request' and send server_data 'server' and verify request p ==> -Statement(ScenarioStatement(Scenario,StringLiteral),ScenarioStatement(Scenario,StringLiteral,Keywords(create),Keywords(jwk)),RuleStatement(Rule,UnknownIgnoreRule(unknown,ignore)), - SlangroomStatement(GivenStatement(Given,I,FsStatement(FsConnectAction(FsSend(send,path,StringLiteral,and,FsAction(read,file,content))),and,SaveAction(output,into,StringLiteral))), - GivenStatement(Given,I,HelpersStatement(HelpersSend(send,object,StringLiteral,and,HelpersSend(send,path,StringLiteral,and,HelpersAction(manipulate,and,get))),and, - SaveAction(output,into,StringLiteral))),GivenStatement(Given,I,HelpersStatement(HelpersSend(send,object,StringLiteral,and, - HelpersSend(send,path,StringLiteral,and,HelpersAction(manipulate,and,get))),and,SaveAction(output,into,StringLiteral))), - GivenStatement(Given,I,FsStatement(FsConnectAction(FsSend(send,path,StringLiteral,and,FsAction(read,file,content))),and,SaveAction(output,into,StringLiteral))), - GivenHaveStatement(Given,I,have,a,StringLiteral,named,StringLiteral),GivenName(Given,my,name,is,Keywords(in),Keywords(a),StringLiteral,Keywords(named),StringLiteral), - GivenHaveStatement(Given,I,have,the,StringLiteral,in,StringLiteral),GivenHaveStatement(Given,I,have,a,StringLiteral,named,StringLiteral), - GivenHaveStatement(Given,I,have,a,StringLiteral,named,StringLiteral),GivenHaveStatement(Given,I,have,a,StringLiteral,named,StringLiteral), - GivenHaveStatement(Given,I,have,a,StringLiteral,named,StringLiteral),WhenStatement(When,I,Identifier,Keywords(from),Keywords(path),StringLiteral), - WhenStatement(When,I,Identifier,StringLiteral,Keywords(to),StringLiteral,Keywords(in),StringLiteral), - WhenStatement(When,I,Keywords(create),Keywords(jwk),Keywords(of),Identifier,Keywords(public),Keywords(key),Keywords(with),Identifier,Keywords(key)), - WhenStatement(When,I,Identifier,StringLiteral,Keywords(in),StringLiteral),WhenStatement(When,I,Keywords(set),StringLiteral,Keywords(to),StringLiteral,Keywords(as),StringLiteral), - WhenStatement(When,I,Keywords(create),Keywords(the),Keywords(url),Keywords(from),StringLiteral), - WhenStatement(When,I,Identifier,StringLiteral,Keywords(as),Identifier,Keywords(request),Keywords(to),StringLiteral), - WhenStatement(When,I,Identifier,Keywords(the),Identifier,Identifier,Keywords(of),StringLiteral,Keywords(as),Identifier,Keywords(request),Keywords(to),StringLiteral), - WhenStatement(When,I,Identifier,Keywords(the),Identifier,StringLiteral,Keywords(bytes),Keywords(of),StringLiteral), - WhenStatement(When,I,Identifier,Keywords(the),StringLiteral,Keywords(to),StringLiteral),WhenStatement(When,I,Identifier,StringLiteral,Keywords(in),StringLiteral), - ThenPrint(Then,print,Keywords(the),StringLiteral),ThenPrint(Then,print,Keywords(the),StringLiteral), - ThenStatement(Then,I,OAuthStatement(OAuthSend(send,request,StringLiteral,and,OAuthSend(send,server_data,StringLiteral,and,OAuthAction(verify,request,parameters))))))) +Statement(ScenarioStatement(Scenario,ScenarioType(StringLiteral)),ScenarioStatement(Scenario,ScenarioType(StringLiteral),ScenarioComment(Keywords(create),Keywords(jwk))),RuleStatement(Rule,UnknownIgnoreRule(unknown,ignore)), + SlangroomStatement(GivenStatement(Given,I,FsStatement(FsConnectAction(FsSend(send,path,StringLiteral,and,FsAction(read,file,content))),and,SaveAction(output,into,StringLiteral)))), + SlangroomStatement(GivenStatement(Given,I,HelpersStatement(HelpersSend(send,object,StringLiteral,and,HelpersSend(send,path,StringLiteral,and,HelpersAction(manipulate,and,get))),and,SaveAction(output,into,StringLiteral)))), + SlangroomStatement(GivenStatement(Given,I,HelpersStatement(HelpersSend(send,object,StringLiteral,and,HelpersSend(send,path,StringLiteral,and,HelpersAction(manipulate,and,get))),and,SaveAction(output,into,StringLiteral)))), + SlangroomStatement(GivenStatement(Given,I,FsStatement(FsConnectAction(FsSend(send,path,StringLiteral,and,FsAction(read,file,content))),and,SaveAction(output,into,StringLiteral)))), + SlangroomStatement(GivenHaveStatement(Given,I,have,a,StringLiteral,named,StringLiteral)),Comment, + SlangroomStatement(GivenName(Given,my,name,is,Keywords(in),Keywords(a),StringLiteral,Keywords(named),StringLiteral)), + SlangroomStatement(GivenHaveStatement(Given,I,have,the,StringLiteral,in,StringLiteral)), + SlangroomStatement(GivenHaveStatement(Given,I,have,a,StringLiteral,named,StringLiteral)), + SlangroomStatement(GivenHaveStatement(Given,I,have,a,StringLiteral,named,StringLiteral)), + SlangroomStatement(GivenHaveStatement(Given,I,have,a,StringLiteral,named,StringLiteral)), + SlangroomStatement(GivenHaveStatement(Given,I,have,a,StringLiteral,named,StringLiteral)),Comment, + SlangroomStatement(WhenStatement(When,I,Identifier,Keywords(from),Keywords(path),StringLiteral)), + SlangroomStatement(WhenStatement(When,I,Identifier,StringLiteral,Keywords(to),StringLiteral,Keywords(in),StringLiteral)), + SlangroomStatement(WhenStatement(When,I,Keywords(create),Keywords(jwk),Keywords(of),Identifier,Keywords(public),Keywords(key),Keywords(with),Identifier,Keywords(key))), + SlangroomStatement(WhenStatement(When,I,Identifier,StringLiteral,Keywords(in),StringLiteral)),Comment, + SlangroomStatement(WhenStatement(When,I,Keywords(set),StringLiteral,Keywords(to),StringLiteral,Keywords(as),StringLiteral)), + SlangroomStatement(WhenStatement(When,I,Keywords(create),Keywords(the),Keywords(url),Keywords(from),StringLiteral)), + SlangroomStatement(WhenStatement(When,I,Identifier,StringLiteral,Keywords(as),Identifier,Keywords(request),Keywords(to),StringLiteral)), + SlangroomStatement(WhenStatement(When,I,Identifier,Keywords(the),Identifier,Identifier,Keywords(of),StringLiteral,Keywords(as),Identifier,Keywords(request),Keywords(to),StringLiteral)), + SlangroomStatement(WhenStatement(When,I,Identifier,Keywords(the),Identifier,StringLiteral,Keywords(bytes),Keywords(of),StringLiteral)), + SlangroomStatement(WhenStatement(When,I,Identifier,Keywords(the),StringLiteral,Keywords(to),StringLiteral)), + SlangroomStatement(WhenStatement(When,I,Identifier,StringLiteral,Keywords(in),StringLiteral)), + SlangroomStatement(ThenPrint(Then,print,Keywords(the),StringLiteral)), + SlangroomStatement(ThenPrint(Then,print,Keywords(the),StringLiteral)), + SlangroomStatement(ThenStatement(Then,I,OAuthStatement(OAuthSend(send,request,StringLiteral,and,OAuthSend(send,server_data,StringLiteral,and,OAuthAction(verify,request,parameters))))))) #Test from Didroom 2 @@ -380,45 +391,41 @@ Given I have a 'string dictionary' named 'server_response' Then print the data ==> -Statement(SlangroomStatement(GivenStatement(Given,I,FsStatement(FsConnectAction(FsSend(send,path,StringLiteral,and,FsAction(read,file,content))),and, - SaveAction(output,Identifier,into,StringLiteral))),GivenStatement(Given,I,HelpersStatement(HelpersSend(send,object,StringLiteral,and,HelpersSend(send,path,StringLiteral,and, - HelpersAction(manipulate,and,get))),and,SaveAction(output,into,StringLiteral))),GivenStatement(Given,I,HelpersStatement(HelpersSend(send,object,StringLiteral,and, - HelpersSend(send,path,StringLiteral,and,HelpersAction(manipulate,and,get))),and,SaveAction(output,Identifier,into,StringLiteral))),GivenStatement(Given,I,FsStatement(FsConnectAction( - FsSend(send,path,StringLiteral,and,FsAction(read,file,content))),and,SaveAction(output,into,StringLiteral))),GivenStatement(Given,I,HelpersStatement( - HelpersSend(send,object,StringLiteral,and,HelpersSend(send,path,StringLiteral,and,HelpersSend(send,value,StringLiteral,and,HelpersAction(manipulate,and,set)))))), - GivenStatement(Given,I,HelpersStatement(HelpersSend(send,object,StringLiteral,and,HelpersSend(send,path,StringLiteral,and,HelpersSend(send,value,StringLiteral,and, - HelpersAction(manipulate,and,set)))))),GivenStatement(Given,I,HelpersStatement(HelpersSend(send,object,StringLiteral,and,HelpersSend(send,path,StringLiteral,and, - HelpersSend(send,value,StringLiteral,and,HelpersAction(manipulate,and,set)))))),GivenStatement(Given,I,FsStatement(FsConnectAction(FsSend(send,path,StringLiteral,and, - FsAction(read,verbatim,file,content))),and,SaveAction(output,into,StringLiteral))),GivenStatement(Given,I,ZencodeStatement(ZencodeSend(send,keys,StringLiteral,and, - ZencodeSend(send,data,StringLiteral,and,ZencodeSend(send,script,StringLiteral,and,ZencodeAction(execute,zencode)))),and,SaveAction(output,into,StringLiteral))), - GivenStatement(Given,I,HelpersStatement(HelpersSend(send,object,StringLiteral,and,HelpersSend(send,path,StringLiteral,and,HelpersAction(manipulate,and,get))),and, - SaveAction(output,into,StringLiteral))),GivenStatement(Given,I,HttpStatement(HttpConnectAction(connect,to,StringLiteral,and,HttpAction(do,get)),and, - SaveAction(output,into,StringLiteral))),GivenStatement(Given,I,HelpersStatement(HelpersSend(send,object,StringLiteral,and,HelpersSend(send,path,StringLiteral,and, - HelpersAction(manipulate,and,get))),and,SaveAction(output,into,StringLiteral))),GivenStatement(Given,I,FsStatement(FsConnectAction(FsSend(send,path,StringLiteral,and, - FsAction(read,verbatim,file,content))),and,SaveAction(output,into,StringLiteral))),GivenStatement(Given,I,ZencodeStatement(ZencodeSend(send,keys,StringLiteral,and, - ZencodeSend(send,data,StringLiteral,and,ZencodeSend(send,script,StringLiteral,and,ZencodeAction(execute,zencode)))),and,SaveAction(output,into,StringLiteral))), - GivenStatement(Given,I,HelpersStatement(HelpersSend(send,object,StringLiteral,and,HelpersSend(send,path,StringLiteral,and,HelpersAction(manipulate,and,get))),and, - SaveAction(output,into,StringLiteral))),GivenStatement(Given,I,HttpStatement(HttpConnectAction(connect,to,StringLiteral,and,HttpAction(do,get)),and, - SaveAction(output,into,StringLiteral))),GivenStatement(Given,I,FsStatement(FsConnectAction(FsSend(send,path,StringLiteral,and,FsAction(read,verbatim,file,content))),and, - SaveAction(output,into,StringLiteral))),GivenStatement(Given,I,ZencodeStatement(ZencodeSend(send,keys,StringLiteral,and,ZencodeSend(send,data,StringLiteral,and, - ZencodeSend(send,script,StringLiteral,and,ZencodeAction(execute,zencode)))),and,SaveAction(output,into,StringLiteral))),GivenStatement(Given,I, - HelpersStatement(HelpersSend(send,object,StringLiteral,and,HelpersSend(send,path,StringLiteral,and,HelpersAction(manipulate,and,get))),and, - SaveAction(output,into,StringLiteral))),GivenStatement(Given,I,HelpersStatement(HelpersSend(send,object,StringLiteral,and,HelpersSend(send,path,StringLiteral,and, - HelpersAction(manipulate,and,get))),and,SaveAction(output,into,StringLiteral))),GivenStatement(Given,I,HelpersStatement(HelpersSend(send,object,StringLiteral,and, - HelpersSend(send,path,StringLiteral,and,HelpersSend(send,value,StringLiteral,and,HelpersAction(manipulate,and,set)))))),GivenStatement(Given,I, - HelpersStatement(HelpersSend(send,object,StringLiteral,and,HelpersSend(send,path,StringLiteral,and,HelpersSend(send,value,StringLiteral,and,HelpersAction(manipulate,and,set)))))), - GivenStatement(Given,I,HelpersStatement(HelpersSend(send,object,StringLiteral,and,HelpersSend(send,path,StringLiteral,and,HelpersSend(send,value,StringLiteral,and, - HelpersAction(manipulate,and,set)))))),GivenStatement(Given,I,HelpersStatement(HelpersSend(send,object,StringLiteral,and,HelpersSend(send,path,StringLiteral,and, - HelpersSend(send,value,StringLiteral,and,HelpersAction(manipulate,and,set)))))),GivenStatement(Given,I,HelpersStatement(HelpersSend(send,object,StringLiteral,and, - HelpersSend(send,path,StringLiteral,and,HelpersSend(send,value,StringLiteral,and,HelpersAction(manipulate,and,set)))))),GivenStatement(Given,I,HelpersStatement( - HelpersSend(send,object,StringLiteral,and,HelpersSend(send,path,StringLiteral,and,HelpersSend(send,value,StringLiteral,and,HelpersAction(manipulate,and,set)))))), - GivenStatement(Given,I,FsStatement(FsConnectAction(FsSend(send,path,StringLiteral,and,FsAction(read,verbatim,file,content))),and,SaveAction(output,into,StringLiteral))), - GivenStatement(Given,I,ZencodeStatement(ZencodeSend(send,keys,StringLiteral,and,ZencodeSend(send,data,StringLiteral,and,ZencodeSend(send,script,StringLiteral,and, - ZencodeAction(execute,zencode)))),and,SaveAction(output,into,StringLiteral))),GivenStatement(Given,I,HelpersStatement(HelpersSend(send,object,StringLiteral,and, - HelpersSend(send,path,StringLiteral,and,HelpersAction(manipulate,and,get))),and,SaveAction(output,into,StringLiteral))),GivenStatement(Given,I,HelpersStatement( - HelpersSend(send,object,StringLiteral,and,HelpersSend(send,path,StringLiteral,and,HelpersAction(manipulate,and,get))),and,SaveAction(output,into,StringLiteral))), - GivenStatement(Given,I,HttpStatement(HttpConnectAction(connect,to,StringLiteral,and,HttpSend(send,object,StringLiteral,and,HttpAction(do,post))),and, - SaveAction(output,into,StringLiteral))),GivenHaveStatement(Given,I,have,a,StringLiteral,named,StringLiteral),ThenPrint(Then,print,Keywords(the),Keywords(data)))) + +Statement(Comment,SlangroomStatement(GivenStatement(Given,I,FsStatement(FsConnectAction(FsSend(send,path,StringLiteral,and,FsAction(read,file,content))),and,SaveAction(output,Identifier,into,StringLiteral)))), + SlangroomStatement(GivenStatement(Given,I,HelpersStatement(HelpersSend(send,object,StringLiteral,and,HelpersSend(send,path,StringLiteral,and,HelpersAction(manipulate,and,get))),and,SaveAction(output,into,StringLiteral)))), + SlangroomStatement(GivenStatement(Given,I,HelpersStatement(HelpersSend(send,object,StringLiteral,and,HelpersSend(send,path,StringLiteral,and,HelpersAction(manipulate,and,get))),and,SaveAction(output,Identifier,into,StringLiteral)))),Comment, + SlangroomStatement(GivenStatement(Given,I,FsStatement(FsConnectAction(FsSend(send,path,StringLiteral,and,FsAction(read,file,content))),and,SaveAction(output,into,StringLiteral)))),Comment, + SlangroomStatement(GivenStatement(Given,I,HelpersStatement(HelpersSend(send,object,StringLiteral,and,HelpersSend(send,path,StringLiteral,and,HelpersSend(send,value,StringLiteral,and,HelpersAction(manipulate,and,set))))))), + SlangroomStatement(GivenStatement(Given,I,HelpersStatement(HelpersSend(send,object,StringLiteral,and,HelpersSend(send,path,StringLiteral,and,HelpersSend(send,value,StringLiteral,and,HelpersAction(manipulate,and,set))))))), + SlangroomStatement(GivenStatement(Given,I,HelpersStatement(HelpersSend(send,object,StringLiteral,and,HelpersSend(send,path,StringLiteral,and,HelpersSend(send,value,StringLiteral,and,HelpersAction(manipulate,and,set))))))), + SlangroomStatement(GivenStatement(Given,I,FsStatement(FsConnectAction(FsSend(send,path,StringLiteral,and,FsAction(read,verbatim,file,content))),and,SaveAction(output,into,StringLiteral)))), + SlangroomStatement(GivenStatement(Given,I,ZencodeStatement(ZencodeSend(send,keys,StringLiteral,and,ZencodeSend(send,data,StringLiteral,and,ZencodeSend(send,script,StringLiteral,and,ZencodeAction(execute,zencode)))),and,SaveAction(output,into,StringLiteral)))),Comment, + SlangroomStatement(GivenStatement(Given,I,HelpersStatement(HelpersSend(send,object,StringLiteral,and,HelpersSend(send,path,StringLiteral,and,HelpersAction(manipulate,and,get))),and,SaveAction(output,into,StringLiteral)))), + SlangroomStatement(GivenStatement(Given,I,HttpStatement(HttpConnectAction(connect,to,StringLiteral,and,HttpAction(do,get)),and,SaveAction(output,into,StringLiteral)))), + SlangroomStatement(GivenStatement(Given,I,HelpersStatement(HelpersSend(send,object,StringLiteral,and,HelpersSend(send,path,StringLiteral,and,HelpersAction(manipulate,and,get))),and,SaveAction(output,into,StringLiteral)))), + SlangroomStatement(GivenStatement(Given,I,FsStatement(FsConnectAction(FsSend(send,path,StringLiteral,and,FsAction(read,verbatim,file,content))),and,SaveAction(output,into,StringLiteral)))), + SlangroomStatement(GivenStatement(Given,I,ZencodeStatement(ZencodeSend(send,keys,StringLiteral,and,ZencodeSend(send,data,StringLiteral,and,ZencodeSend(send,script,StringLiteral,and,ZencodeAction(execute,zencode)))),and,SaveAction(output,into,StringLiteral)))),Comment, + SlangroomStatement(GivenStatement(Given,I,HelpersStatement(HelpersSend(send,object,StringLiteral,and,HelpersSend(send,path,StringLiteral,and,HelpersAction(manipulate,and,get))),and,SaveAction(output,into,StringLiteral)))), + SlangroomStatement(GivenStatement(Given,I,HttpStatement(HttpConnectAction(connect,to,StringLiteral,and,HttpAction(do,get)),and,SaveAction(output,into,StringLiteral)))), + SlangroomStatement(GivenStatement(Given,I,FsStatement(FsConnectAction(FsSend(send,path,StringLiteral,and,FsAction(read,verbatim,file,content))),and,SaveAction(output,into,StringLiteral)))), + SlangroomStatement(GivenStatement(Given,I,ZencodeStatement(ZencodeSend(send,keys,StringLiteral,and,ZencodeSend(send,data,StringLiteral,and,ZencodeSend(send,script,StringLiteral,and,ZencodeAction(execute,zencode)))),and,SaveAction(output,into,StringLiteral)))),Comment, + SlangroomStatement(GivenStatement(Given,I,HelpersStatement(HelpersSend(send,object,StringLiteral,and,HelpersSend(send,path,StringLiteral,and,HelpersAction(manipulate,and,get))),and,SaveAction(output,into,StringLiteral)))), + SlangroomStatement(GivenStatement(Given,I,HelpersStatement(HelpersSend(send,object,StringLiteral,and,HelpersSend(send,path,StringLiteral,and,HelpersAction(manipulate,and,get))),and,SaveAction(output,into,StringLiteral)))), + SlangroomStatement(GivenStatement(Given,I,HelpersStatement(HelpersSend(send,object,StringLiteral,and,HelpersSend(send,path,StringLiteral,and,HelpersSend(send,value,StringLiteral,and,HelpersAction(manipulate,and,set))))))), + SlangroomStatement(GivenStatement(Given,I,HelpersStatement(HelpersSend(send,object,StringLiteral,and,HelpersSend(send,path,StringLiteral,and,HelpersSend(send,value,StringLiteral,and,HelpersAction(manipulate,and,set))))))), + SlangroomStatement(GivenStatement(Given,I,HelpersStatement(HelpersSend(send,object,StringLiteral,and,HelpersSend(send,path,StringLiteral,and,HelpersSend(send,value,StringLiteral,and,HelpersAction(manipulate,and,set))))))), + SlangroomStatement(GivenStatement(Given,I,HelpersStatement(HelpersSend(send,object,StringLiteral,and,HelpersSend(send,path,StringLiteral,and,HelpersSend(send,value,StringLiteral,and,HelpersAction(manipulate,and,set))))))), + SlangroomStatement(GivenStatement(Given,I,HelpersStatement(HelpersSend(send,object,StringLiteral,and,HelpersSend(send,path,StringLiteral,and,HelpersSend(send,value,StringLiteral,and,HelpersAction(manipulate,and,set))))))), + SlangroomStatement(GivenStatement(Given,I,HelpersStatement(HelpersSend(send,object,StringLiteral,and,HelpersSend(send,path,StringLiteral,and,HelpersSend(send,value,StringLiteral,and,HelpersAction(manipulate,and,set))))))), + SlangroomStatement(GivenStatement(Given,I,FsStatement(FsConnectAction(FsSend(send,path,StringLiteral,and,FsAction(read,verbatim,file,content))),and,SaveAction(output,into,StringLiteral)))), + SlangroomStatement(GivenStatement(Given,I,ZencodeStatement(ZencodeSend(send,keys,StringLiteral,and,ZencodeSend(send,data,StringLiteral,and,ZencodeSend(send,script,StringLiteral,and,ZencodeAction(execute,zencode)))),and,SaveAction(output,into,StringLiteral)))),Comment, + SlangroomStatement(GivenStatement(Given,I,HelpersStatement(HelpersSend(send,object,StringLiteral,and,HelpersSend(send,path,StringLiteral,and,HelpersAction(manipulate,and,get))),and,SaveAction(output,into,StringLiteral)))), + SlangroomStatement(GivenStatement(Given,I,HelpersStatement(HelpersSend(send,object,StringLiteral,and,HelpersSend(send,path,StringLiteral,and,HelpersAction(manipulate,and,get))),and,SaveAction(output,into,StringLiteral)))), + SlangroomStatement(GivenStatement(Given,I,HttpStatement(HttpConnectAction(connect,to,StringLiteral,and,HttpSend(send,object,StringLiteral,and,HttpAction(do,post))),and,SaveAction(output,into,StringLiteral)))), + SlangroomStatement(GivenHaveStatement(Given,I,have,a,StringLiteral,named,StringLiteral)), + SlangroomStatement(ThenPrint(Then,print,Keywords(the),Keywords(data)))) + #Test from Didroom 3 @@ -495,42 +502,60 @@ Then I manipulate and delete and output into 'parresult' ==> -Statement(SlangroomStatement(GivenStatement(Given,I,FsStatement(FsConnectAction(FsSend(send,path,StringLiteral,and,FsAction(read,file,content))),and,SaveAction(output,into,StringLiteral))), - GivenHaveStatement(Given,I,have,a,StringLiteral,named,StringLiteral),GivenName(Given,my,name,is,Keywords(in),Keywords(a),StringLiteral,Keywords(named),StringLiteral), - GivenHaveStatement(Given,I,have,the,StringLiteral,in,StringLiteral),GivenHaveStatement(Given,I,have,a,StringLiteral,named,StringLiteral), - GivenHaveStatement(Given,I,have,a,StringLiteral,named,StringLiteral),GivenHaveStatement(Given,I,have,a,StringLiteral,named,StringLiteral), - GivenHaveStatement(Given,I,have,a,StringLiteral,named,StringLiteral),GivenHaveStatement(Given,I,have,a,StringLiteral,named,StringLiteral), - GivenHaveStatement(Given,I,have,a,StringLiteral,named,StringLiteral),GivenHaveStatement(Given,I,have,a,StringLiteral,named,StringLiteral), - GivenHaveStatement(Given,I,have,a,StringLiteral,named,StringLiteral),GivenHaveStatement(Given,I,have,a,StringLiteral,named,StringLiteral), - GivenHaveStatement(Given,I,have,a,StringLiteral,named,StringLiteral),GivenHaveStatement(Given,I,have,a,StringLiteral,named,StringLiteral), - GivenHaveStatement(Given,I,have,a,StringLiteral,named,StringLiteral),GivenHaveStatement(Given,I,have,a,StringLiteral,named,StringLiteral,inside,StringLiteral), - WhenStatement(When,I,Identifier,StringLiteral,Keywords(to),StringLiteral),WhenStatement(When,I,Keywords(set),StringLiteral,Keywords(to),StringLiteral,Keywords(as),StringLiteral), - WhenStatement(When,I,Keywords(create),Keywords(the),Keywords(url),Keywords(from),StringLiteral),WhenStatement(When,I,Identifier,StringLiteral,Keywords(as),Identifier,Keywords(request), - Keywords(to),StringLiteral),WhenStatement(When,I,Identifier,StringLiteral,Keywords(as),Identifier,Keywords(request),Keywords(to),StringLiteral), - WhenStatement(When,I,Identifier,StringLiteral,Keywords(as),Identifier,Keywords(request),Keywords(to),StringLiteral), - WhenStatement(When,I,Identifier,StringLiteral,Keywords(as),Identifier,Keywords(request),Keywords(to),StringLiteral), - WhenStatement(When,I,Identifier,StringLiteral,Keywords(as),Identifier,Keywords(request),Keywords(to),StringLiteral), - WhenStatement(When,I,Identifier,Keywords(the),Identifier,Identifier,Keywords(of),StringLiteral,Keywords(as),Identifier,Keywords(request),Keywords(to),StringLiteral), - WhenStatement(When,I,Keywords(create),Keywords(the),Keywords(json),Identifier,Identifier,Keywords(of),StringLiteral), - WhenStatement(When,I,Identifier,Keywords(the),StringLiteral,Keywords(to),StringLiteral),WhenStatement(When,I,Identifier,Keywords(the),StringLiteral,Keywords(to),StringLiteral), - WhenStatement(When,I,Identifier,Keywords(the),Identifier,Identifier,Keywords(of),StringLiteral,Keywords(as),Identifier,Keywords(request),Keywords(to),StringLiteral), - WhenStatement(When,I,Identifier,Keywords(the),Identifier,StringLiteral,Keywords(bytes),Keywords(of),StringLiteral), - WhenStatement(When,I,Identifier,Keywords(the),StringLiteral,Keywords(to),StringLiteral),WhenStatement(When,I,Identifier,StringLiteral,Keywords(in),StringLiteral), - WhenStatement(When,I,Identifier,Keywords(the),StringLiteral,Keywords(to),StringLiteral,Keywords(in),StringLiteral), - WhenStatement(When,I,Identifier,StringLiteral,Keywords(in),StringLiteral),WhenStatement(When,I,Identifier,Keywords(the),StringLiteral,Keywords(to),StringLiteral,Keywords(in),StringLiteral), - WhenStatement(When,I,Keywords(create),Identifier,Keywords(of),Identifier,StringLiteral,Keywords(from),Keywords(array),StringLiteral), - WhenStatement(When,I,Identifier,Keywords(the),StringLiteral,Keywords(to),StringLiteral),WhenStatement(When,I,Identifier,StringLiteral,Keywords(in),StringLiteral), - WhenStatement(When,I,Identifier,Keywords(from),Keywords(path),StringLiteral),WhenStatement(When,I,Identifier,StringLiteral,Keywords(to),StringLiteral,Keywords(in),StringLiteral), - WhenStatement(When,I,Keywords(create),Keywords(jwk),Keywords(of),Identifier,Keywords(public),Keywords(key),Keywords(with),Identifier,Keywords(key)), - WhenStatement(When,I,Identifier,StringLiteral,Keywords(in),StringLiteral),ThenPrint(Then,print,Keywords(the),StringLiteral),ThenPrint(Then,print,Keywords(the),StringLiteral), - ThenPrint(Then,print,Keywords(the),StringLiteral),ThenStatement(Then,I,OAuthStatement(OAuthSend(send,request,StringLiteral,and, - OAuthSend(send,client,StringLiteral,and,OAuthSend(send,server_data,StringLiteral,and,OAuthSend(send,expires_in,StringLiteral,and,OAuthAction(generate,request,uri))))),and, - SaveAction(output,into,StringLiteral))),ThenStatement(Then,I,HelpersStatement(HelpersAction(manipulate,and,delete),and,SaveAction(output,into,StringLiteral))), - ThenStatement(Then,I,HelpersStatement(HelpersAction(manipulate,and,delete),and,SaveAction(output,into,StringLiteral))),ThenStatement(Then,I, - HelpersStatement(HelpersAction(manipulate,and,delete),and,SaveAction(output,into,StringLiteral))),ThenStatement(Then,I,HelpersStatement(HelpersSend(send,object,StringLiteral,and, - HelpersSend(send,path,StringLiteral,and,HelpersAction(manipulate,and,get))),and,SaveAction(output,into,StringLiteral))),ThenStatement(Then,I,HelpersStatement( - HelpersSend(send,object,StringLiteral,and,HelpersSend(send,path,StringLiteral,and,HelpersAction(manipulate,and,get))),and,SaveAction(output,into,StringLiteral))), - ThenStatement(Then,I,HelpersStatement(HelpersAction(manipulate,and,delete),and,SaveAction(output,into,StringLiteral))))) +Statement(SlangroomStatement(GivenStatement(Given,I,FsStatement(FsConnectAction(FsSend(send,path,StringLiteral,and,FsAction(read,file,content))),and,SaveAction(output,into,StringLiteral)))), + SlangroomStatement(GivenHaveStatement(Given,I,have,a,StringLiteral,named,StringLiteral)),Comment, + SlangroomStatement(GivenName(Given,my,name,is,Keywords(in),Keywords(a),StringLiteral,Keywords(named),StringLiteral)), + SlangroomStatement(GivenHaveStatement(Given,I,have,the,StringLiteral,in,StringLiteral)), + SlangroomStatement(GivenHaveStatement(Given,I,have,a,StringLiteral,named,StringLiteral)), + SlangroomStatement(GivenHaveStatement(Given,I,have,a,StringLiteral,named,StringLiteral)), + SlangroomStatement(GivenHaveStatement(Given,I,have,a,StringLiteral,named,StringLiteral)), + SlangroomStatement(GivenHaveStatement(Given,I,have,a,StringLiteral,named,StringLiteral)),Comment, + SlangroomStatement(GivenHaveStatement(Given,I,have,a,StringLiteral,named,StringLiteral)), + SlangroomStatement(GivenHaveStatement(Given,I,have,a,StringLiteral,named,StringLiteral)), + SlangroomStatement(GivenHaveStatement(Given,I,have,a,StringLiteral,named,StringLiteral)), + SlangroomStatement(GivenHaveStatement(Given,I,have,a,StringLiteral,named,StringLiteral)), + SlangroomStatement(GivenHaveStatement(Given,I,have,a,StringLiteral,named,StringLiteral)), + SlangroomStatement(GivenHaveStatement(Given,I,have,a,StringLiteral,named,StringLiteral)), + SlangroomStatement(GivenHaveStatement(Given,I,have,a,StringLiteral,named,StringLiteral)), + SlangroomStatement(GivenHaveStatement(Given,I,have,a,StringLiteral,named,StringLiteral)), + SlangroomStatement(GivenHaveStatement(Given,I,have,a,StringLiteral,named,StringLiteral,inside,StringLiteral)), + SlangroomStatement(WhenStatement(When,I,Identifier,StringLiteral,Keywords(to),StringLiteral)),Comment, + SlangroomStatement(WhenStatement(When,I,Keywords(set),StringLiteral,Keywords(to),StringLiteral,Keywords(as),StringLiteral)), + SlangroomStatement(WhenStatement(When,I,Keywords(create),Keywords(the),Keywords(url),Keywords(from),StringLiteral)), + SlangroomStatement(WhenStatement(When,I,Identifier,StringLiteral,Keywords(as),Identifier,Keywords(request),Keywords(to),StringLiteral)), + SlangroomStatement(WhenStatement(When,I,Identifier,StringLiteral,Keywords(as),Identifier,Keywords(request),Keywords(to),StringLiteral)), + SlangroomStatement(WhenStatement(When,I,Identifier,StringLiteral,Keywords(as),Identifier,Keywords(request),Keywords(to),StringLiteral)), + SlangroomStatement(WhenStatement(When,I,Identifier,StringLiteral,Keywords(as),Identifier,Keywords(request),Keywords(to),StringLiteral)), + SlangroomStatement(WhenStatement(When,I,Identifier,StringLiteral,Keywords(as),Identifier,Keywords(request),Keywords(to),StringLiteral)), + SlangroomStatement(WhenStatement(When,I,Identifier,Keywords(the),Identifier,Identifier,Keywords(of),StringLiteral,Keywords(as),Identifier,Keywords(request),Keywords(to),StringLiteral)), + SlangroomStatement(WhenStatement(When,I,Keywords(create),Keywords(the),Keywords(json),Identifier,Identifier,Keywords(of),StringLiteral)), + SlangroomStatement(WhenStatement(When,I,Identifier,Keywords(the),StringLiteral,Keywords(to),StringLiteral)), + SlangroomStatement(WhenStatement(When,I,Identifier,Keywords(the),StringLiteral,Keywords(to),StringLiteral)), + SlangroomStatement(WhenStatement(When,I,Identifier,Keywords(the),Identifier,Identifier,Keywords(of),StringLiteral,Keywords(as),Identifier,Keywords(request),Keywords(to),StringLiteral)), + SlangroomStatement(WhenStatement(When,I,Identifier,Keywords(the),Identifier,StringLiteral,Keywords(bytes),Keywords(of),StringLiteral)), + SlangroomStatement(WhenStatement(When,I,Identifier,Keywords(the),StringLiteral,Keywords(to),StringLiteral)), + SlangroomStatement(WhenStatement(When,I,Identifier,StringLiteral,Keywords(in),StringLiteral)),Comment, + SlangroomStatement(WhenStatement(When,I,Identifier,Keywords(the),StringLiteral,Keywords(to),StringLiteral,Keywords(in),StringLiteral)), + SlangroomStatement(WhenStatement(When,I,Identifier,StringLiteral,Keywords(in),StringLiteral)), + SlangroomStatement(WhenStatement(When,I,Identifier,Keywords(the),StringLiteral,Keywords(to),StringLiteral,Keywords(in),StringLiteral)), + SlangroomStatement(WhenStatement(When,I,Keywords(create),Identifier,Keywords(of),Identifier,StringLiteral,Keywords(from),Keywords(array),StringLiteral)), + SlangroomStatement(WhenStatement(When,I,Identifier,Keywords(the),StringLiteral,Keywords(to),StringLiteral)), + SlangroomStatement(WhenStatement(When,I,Identifier,StringLiteral,Keywords(in),StringLiteral)),Comment, + SlangroomStatement(WhenStatement(When,I,Identifier,Keywords(from),Keywords(path),StringLiteral)), + SlangroomStatement(WhenStatement(When,I,Identifier,StringLiteral,Keywords(to),StringLiteral,Keywords(in),StringLiteral)), + SlangroomStatement(WhenStatement(When,I,Keywords(create),Keywords(jwk),Keywords(of),Identifier,Keywords(public),Keywords(key),Keywords(with),Identifier,Keywords(key))), + SlangroomStatement(WhenStatement(When,I,Identifier,StringLiteral,Keywords(in),StringLiteral)), + SlangroomStatement(ThenPrint(Then,print,Keywords(the),StringLiteral)), + SlangroomStatement(ThenPrint(Then,print,Keywords(the),StringLiteral)), + SlangroomStatement(ThenPrint(Then,print,Keywords(the),StringLiteral)), + SlangroomStatement(ThenStatement(Then,I,OAuthStatement(OAuthSend(send,request,StringLiteral,and,OAuthSend(send,client,StringLiteral,and,OAuthSend(send,server_data,StringLiteral,and,OAuthSend(send,expires_in,StringLiteral,and,OAuthAction(generate,request,uri))))),and,SaveAction(output,into,StringLiteral)))), + SlangroomStatement(ThenStatement(Then,I,HelpersStatement(HelpersAction(manipulate,and,delete),and,SaveAction(output,into,StringLiteral)))), + SlangroomStatement(ThenStatement(Then,I,HelpersStatement(HelpersAction(manipulate,and,delete),and,SaveAction(output,into,StringLiteral)))), + SlangroomStatement(ThenStatement(Then,I,HelpersStatement(HelpersAction(manipulate,and,delete),and,SaveAction(output,into,StringLiteral)))), + SlangroomStatement(ThenStatement(Then,I,HelpersStatement(HelpersSend(send,object,StringLiteral,and,HelpersSend(send,path,StringLiteral,and,HelpersAction(manipulate,and,get))),and,SaveAction(output,into,StringLiteral)))), + SlangroomStatement(ThenStatement(Then,I,HelpersStatement(HelpersSend(send,object,StringLiteral,and,HelpersSend(send,path,StringLiteral,and,HelpersAction(manipulate,and,get))),and,SaveAction(output,into,StringLiteral)))), + SlangroomStatement(ThenStatement(Then,I,HelpersStatement(HelpersAction(manipulate,and,delete),and,SaveAction(output,into,StringLiteral))))) + #Test from Didroom 4 @@ -647,65 +672,93 @@ Then I manipulate and delete and output into 'secrets' ==> -Statement(RuleStatement(Rule,GenericRule(Keywords(output),Identifier,Identifier)),ScenarioStatement(Scenario,Identifier),ScenarioStatement(Scenario,Identifier), - ScenarioStatement(Scenario,Keywords(ethereum)),ScenarioStatement(Scenario,Identifier),ScenarioStatement(Scenario,Identifier), - ScenarioStatement(Scenario,Identifier),ScenarioStatement(Scenario,Identifier),ScenarioStatement(Scenario,Identifier),SlangroomStatement(GivenStatement(Given,I,ShellStatement( - ShellSend(send,command,StringLiteral,and,ShellAction(execute,in,shell)),and,SaveAction(output,into,StringLiteral))),GivenStatement(Given,I,FsStatement(FsConnectAction( - FsSend(send,path,StringLiteral,and,FsAction(verify,file,does,not,exist))))),GivenStatement(Given,I,FsStatement(FsConnectAction(FsSend(send,path,StringLiteral,and, - FsAction(read,verbatim,file,content))),and,SaveAction(output,into,StringLiteral))),GivenStatement(Given,I,ZencodeStatement(ZencodeSend(send,keys,StringLiteral,and, - ZencodeSend(send,data,StringLiteral,and,ZencodeSend(send,script,StringLiteral,and,ZencodeAction(execute,zencode)))),and,SaveAction(output,Identifier,into,StringLiteral))), - GivenStatement(Given,I,HelpersStatement(HelpersSend(send,object,StringLiteral,and,HelpersSend(send,path,StringLiteral,and,HelpersAction(manipulate,and,get))),and, - SaveAction(output,into,StringLiteral))),GivenStatement(Given,I,HelpersStatement(HelpersSend(send,object,StringLiteral,and,HelpersSend(send,path,StringLiteral,and, - HelpersAction(manipulate,and,get))),and,SaveAction(output,Identifier,into,StringLiteral))),GivenStatement(Given,I,FsStatement(FsConnectAction(FsSend(send,path,StringLiteral,and, - FsAction(read,file,content))),and,SaveAction(output,into,StringLiteral))),GivenHaveStatement(Given,I,have,a,StringLiteral,named,StringLiteral), - GivenName(Given,I,my,name,is,Keywords(in),Keywords(a),StringLiteral,Keywords(named),StringLiteral,HaveStatement(and,I,have,a,StringLiteral,named,StringLiteral), - HaveStatement(and,I,have,a,StringLiteral,in,StringLiteral),HaveStatement(and,I,have,a,StringLiteral,named,StringLiteral)),IfEndifStatement(Condition(If,I,verify,StringLiteral, - Keywords(is),Identifier,Keywords(in),StringLiteral),WhenStatement(When,I,Identifier,Keywords(from),Keywords(path),StringLiteral,Keywords(and),I,Identifier,StringLiteral,Keywords(to), - StringLiteral),EndIf),IfEndifStatement(Condition(If,I,verify,StringLiteral,Keywords(is),Keywords(not),Identifier,Keywords(in),StringLiteral),WhenStatement(When,I,Identifier, - StringLiteral,Keywords(to),StringLiteral),EndIf),WhenStatement(When,I,Keywords(create),Keywords(the),Identifier,Keywords(public),Keywords(key),Keywords(and),I,Keywords(create), - Keywords(the),Identifier,Keywords(public),Keywords(key),Keywords(and),I,Keywords(create),Keywords(the),Keywords(ethereum),Keywords(address),Keywords(and),I,Keywords(create), - Keywords(the),Identifier,Keywords(public),Keywords(key),Keywords(and),I,Keywords(create),Keywords(the),Identifier,Keywords(public),Keywords(key),Keywords(and),I,Keywords(create), - Keywords(the),Identifier,Keywords(public),Keywords(key),Keywords(and),I,Keywords(create),Keywords(the),Identifier,Keywords(public),Keywords(key),Keywords(and),I,Keywords(create), - Keywords(the),Identifier,Keywords(public),Keywords(key),Keywords(and),I,Keywords(create),Keywords(the),Identifier,Keywords(public),Keywords(key)),ThenPrint(Then,I,print,Keywords(the), - StringLiteral,Keywords(and),I,print,Keywords(the),StringLiteral,Keywords(and),I,print,Keywords(the),StringLiteral,Keywords(and),I,print,Keywords(the),StringLiteral,Keywords(and), - I,print,Keywords(the),StringLiteral,Keywords(and),I,print,Keywords(the),StringLiteral,Keywords(and),I,print,Keywords(the),StringLiteral,Keywords(as),StringLiteral,Keywords(and), - I,print,Keywords(the),StringLiteral,Keywords(and),I,print,Keywords(the),StringLiteral,Keywords(and),I,print,Keywords(my),Keywords(name),Keywords(in),StringLiteral,Keywords(and), - I,print,Keywords(the),StringLiteral,Keywords(and),I,print,Keywords(the),StringLiteral),ThenStatement(Then,I,HelpersStatement(HelpersSend(send,object,StringLiteral,and, - HelpersSend(send,path,StringLiteral,and,HelpersSend(send,value,StringLiteral,and,HelpersAction(manipulate,and,set)))))),ThenStatement(Then,I,HelpersStatement( - HelpersSend(send,object,StringLiteral,and,HelpersSend(send,path,StringLiteral,and,HelpersSend(send,value,StringLiteral,and,HelpersAction(manipulate,and,set)))))), - ThenStatement(Then,I,HelpersStatement(HelpersSend(send,object,StringLiteral,and,HelpersSend(send,path,StringLiteral,and,HelpersSend(send,value,StringLiteral,and, - HelpersAction(manipulate,and,set)))))),ThenStatement(Then,I,HelpersStatement(HelpersSend(send,object,StringLiteral,and,HelpersSend(send,path,StringLiteral,and, - HelpersSend(send,value,StringLiteral,and,HelpersAction(manipulate,and,set)))))),ThenStatement(Then,I,HelpersStatement(HelpersSend(send,object,StringLiteral,and, - HelpersSend(send,path,StringLiteral,and,HelpersSend(send,value,StringLiteral,and,HelpersAction(manipulate,and,set)))))),ThenStatement(Then,I,HelpersStatement( - HelpersSend(send,object,StringLiteral,and,HelpersSend(send,path,StringLiteral,and,HelpersSend(send,value,StringLiteral,and,HelpersAction(manipulate,and,set)))))), - ThenStatement(Then,I,HelpersStatement(HelpersSend(send,object,StringLiteral,and,HelpersSend(send,path,StringLiteral,and,HelpersSend(send,value,StringLiteral,and, - HelpersAction(manipulate,and,set)))))),ThenStatement(Then,I,HelpersStatement(HelpersSend(send,object,StringLiteral,and,HelpersSend(send,path,StringLiteral,and, - HelpersSend(send,value,StringLiteral,and,HelpersAction(manipulate,and,set)))))),ThenStatement(Then,I,HelpersStatement(HelpersSend(send,object,StringLiteral,and, - HelpersSend(send,path,StringLiteral,and,HelpersSend(send,value,StringLiteral,and,HelpersAction(manipulate,and,set)))))),ThenStatement(Then,I,HelpersStatement( - HelpersSend(send,object,StringLiteral,and,HelpersSend(send,path,StringLiteral,and,HelpersSend(send,value,StringLiteral,and,HelpersAction(manipulate,and,set)))))), - ThenStatement(Then,I,HelpersStatement(HelpersSend(send,object,StringLiteral,and,HelpersSend(send,path,StringLiteral,and,HelpersSend(send,value,StringLiteral,and, - HelpersAction(manipulate,and,set)))))),ThenStatement(Then,I,FsStatement(FsConnectAction(FsSend(send,path,StringLiteral,and,FsAction(read,verbatim,file,content))), - and,SaveAction(output,into,StringLiteral))),ThenStatement(Then,I,ZencodeStatement(ZencodeSend(send,keys,StringLiteral,and,ZencodeSend(send,data,StringLiteral,and, - ZencodeSend(send,script,StringLiteral,and,ZencodeAction(execute,zencode)))),and,SaveAction(output,into,StringLiteral))),ThenStatement(Then,I,HelpersStatement( - HelpersAction(manipulate,and,delete),and,SaveAction(output,into,StringLiteral))),ThenStatement(Then,I,HelpersStatement(HelpersAction(manipulate,and,delete),and, - SaveAction(output,into,StringLiteral))),ThenStatement(Then,I,HttpStatement(HttpConnectAction(connect,to,StringLiteral,and,HttpSend(send,object,StringLiteral,and,HttpAction(do,post))), - and,SaveAction(output,into,StringLiteral))),ThenStatement(Then,I,HelpersStatement(HelpersAction(manipulate,and,delete),and,SaveAction(output,into,StringLiteral))), - ThenStatement(Then,I,HelpersStatement(HelpersSend(send,object,StringLiteral,and,HelpersSend(send,path,StringLiteral,and,HelpersAction(manipulate,and,get))),and, - SaveAction(output,into,StringLiteral))),ThenStatement(Then,I,HttpStatement(HttpConnectAction(connect,to,StringLiteral,and,HttpSend(send,object,StringLiteral,and,HttpAction(do,post))), - and,SaveAction(output,into,StringLiteral))),ThenStatement(Then,I,HelpersStatement(HelpersAction(manipulate,and,delete),and,SaveAction(output,into,StringLiteral))), - ThenStatement(Then,I,HelpersStatement(HelpersAction(manipulate,and,delete),and,SaveAction(output,into,StringLiteral))),ThenStatement(Then,I,FsStatement(FsConnectAction( - FsSend(send,path,StringLiteral,and,FsAction(read,file,content))),and,SaveAction(output,into,StringLiteral))),ThenStatement(Then,I,FsStatement(FsConnectAction( - FsSend(send,path,StringLiteral,and,FsAction(read,verbatim,file,content))),and,SaveAction(output,into,StringLiteral))),ThenStatement(Then,I,ZencodeStatement( - ZencodeSend(send,keys,StringLiteral,and,ZencodeSend(send,data,StringLiteral,and,ZencodeSend(send,script,StringLiteral,and,ZencodeAction(execute,zencode)))),and, - SaveAction(output,into,StringLiteral))),ThenStatement(Then,I,HelpersStatement(HelpersSend(send,object,StringLiteral,and,HelpersSend(send,path,StringLiteral,and, - HelpersAction(manipulate,and,get))),and,SaveAction(output,into,StringLiteral))),ThenStatement(Then,I,HelpersStatement(HelpersSend(send,object,StringLiteral,and, - HelpersSend(send,path,StringLiteral,and,HelpersSend(send,value,StringLiteral,and,HelpersAction(manipulate,and,set)))))),ThenStatement(Then,I, - HelpersStatement(HelpersSend(send,object,StringLiteral,and,HelpersSend(send,path,StringLiteral,and,HelpersSend(send,value,StringLiteral,and,HelpersAction(manipulate,and,set)))))), - ThenStatement(Then,I,FsStatement(FsConnectAction(FsSend(send,path,StringLiteral,and,FsSend(send,content,StringLiteral,and,FsAction(store,in,file)))))), - ThenStatement(Then,I,ShellStatement(ShellSend(send,command,StringLiteral,and,ShellAction(execute,in,shell)))),ThenStatement(Then,I,FsStatement(FsConnectAction( - FsSend(send,path,StringLiteral,and,FsSend(send,content,StringLiteral,and,FsAction(store,in,file)))))),ThenStatement(Then,I,HelpersStatement(HelpersAction(manipulate,and,delete),and, - SaveAction(output,into,StringLiteral))),ThenStatement(Then,I,HelpersStatement(HelpersAction(manipulate,and,delete),and,SaveAction(output,into,StringLiteral))), - ThenStatement(Then,I,HelpersStatement(HelpersAction(manipulate,and,delete),and,SaveAction(output,into,StringLiteral))),ThenStatement(Then,I,HelpersStatement( - HelpersAction(manipulate,and,delete),and,SaveAction(output,into,StringLiteral))),ThenStatement(Then,I,HelpersStatement(HelpersAction(manipulate,and,delete),and, - SaveAction(output,into,StringLiteral))),ThenStatement(Then,I,HelpersStatement(HelpersAction(manipulate,and,delete),and,SaveAction(output,into,StringLiteral))))) +Statement(RuleStatement(Rule,GenericRule(Keywords(output),Identifier,Identifier)),ScenarioStatement(Scenario,ScenarioType(Identifier)),ScenarioStatement(Scenario,ScenarioType(Identifier)), + ScenarioStatement(Scenario,ScenarioType(Keywords(ethereum))),ScenarioStatement(Scenario,ScenarioType(Identifier)),ScenarioStatement(Scenario,ScenarioType(Identifier)),ScenarioStatement(Scenario,ScenarioType(Identifier)), + ScenarioStatement(Scenario,ScenarioType(Identifier)),ScenarioStatement(Scenario,ScenarioType(Identifier)),Comment, + SlangroomStatement(GivenStatement(Given,I,ShellStatement(ShellSend(send,command,StringLiteral,and,ShellAction(execute,in,shell)),and,SaveAction(output,into,StringLiteral)))), + SlangroomStatement(GivenStatement(Given,I,FsStatement(FsConnectAction(FsSend(send,path,StringLiteral,and,FsAction(verify,file,does,not,exist)))))),Comment, + SlangroomStatement(GivenStatement(Given,I,FsStatement(FsConnectAction(FsSend(send,path,StringLiteral,and,FsAction(read,verbatim,file,content))),and,SaveAction(output,into,StringLiteral)))), + SlangroomStatement(GivenStatement(Given,I,ZencodeStatement(ZencodeSend(send,keys,StringLiteral,and,ZencodeSend(send,data,StringLiteral,and,ZencodeSend(send,script,StringLiteral,and,ZencodeAction(execute,zencode)))),and,SaveAction(output,Identifier,into,StringLiteral)))),Comment, + SlangroomStatement(GivenStatement(Given,I,HelpersStatement(HelpersSend(send,object,StringLiteral,and,HelpersSend(send,path,StringLiteral,and,HelpersAction(manipulate,and,get))),and,SaveAction(output,into,StringLiteral)))), + SlangroomStatement(GivenStatement(Given,I,HelpersStatement(HelpersSend(send,object,StringLiteral,and,HelpersSend(send,path,StringLiteral,and,HelpersAction(manipulate,and,get))),and,SaveAction(output,Identifier,into,StringLiteral)))),Comment, + SlangroomStatement(GivenStatement(Given,I,FsStatement(FsConnectAction(FsSend(send,path,StringLiteral,and,FsAction(read,file,content))),and,SaveAction(output,into,StringLiteral)))), + SlangroomStatement(GivenHaveStatement(Given,I,have,a,StringLiteral,named,StringLiteral)), + SlangroomStatement(GivenName(Given,I,my,name,is,Keywords(in),Keywords(a),StringLiteral,Keywords(named),StringLiteral,HaveStatement(and,I,have,a,StringLiteral,named,StringLiteral),HaveStatement(and,I,have,a,StringLiteral,in,StringLiteral),HaveStatement(and,I,have,a,StringLiteral,named,StringLiteral))), + SlangroomStatement(IfEndifStatement(Condition(If,I,verify,StringLiteral,Keywords(is),Identifier,Keywords(in),StringLiteral),WhenStatement(When,I,Identifier,Keywords(from),Keywords(path),StringLiteral,and,I,Identifier,StringLiteral,Keywords(to),StringLiteral),EndIf)), + SlangroomStatement(IfEndifStatement(Condition(If,I,verify,StringLiteral,Keywords(is),Keywords(not),Identifier,Keywords(in),StringLiteral),WhenStatement(When,I,Identifier,StringLiteral,Keywords(to),StringLiteral),EndIf)), + SlangroomStatement(WhenStatement(When,I,Keywords(create),Keywords(the),Identifier,Keywords(public),Keywords(key),and,I,Keywords(create),Keywords(the),Identifier,Keywords(public),Keywords(key),and,I,Keywords(create),Keywords(the),Keywords(ethereum),Keywords(address),and,I,Keywords(create),Keywords(the),Identifier,Keywords(public),Keywords(key),and,I,Keywords(create),Keywords(the),Identifier,Keywords(public),Keywords(key),and,I,Keywords(create),Keywords(the),Identifier,Keywords(public),Keywords(key),and,I,Keywords(create),Keywords(the),Identifier,Keywords(public),Keywords(key),and,I,Keywords(create),Keywords(the),Identifier,Keywords(public),Keywords(key),and,I,Keywords(create),Keywords(the),Identifier,Keywords(public),Keywords(key))), + SlangroomStatement(ThenPrint(Then,I,print,Keywords(the),StringLiteral,and,I,print,Keywords(the),StringLiteral,and,I,print,Keywords(the),StringLiteral,and,I,print,Keywords(the),StringLiteral,and,I,print,Keywords(the),StringLiteral,and,I,print,Keywords(the),StringLiteral,and,I,print,Keywords(the),StringLiteral,Keywords(as),StringLiteral,and,I,print,Keywords(the),StringLiteral,and,I,print,Keywords(the),StringLiteral,and,I,print,Keywords(my),Keywords(name),Keywords(in),StringLiteral,and,I,print,Keywords(the),StringLiteral,and,I,print,Keywords(the),StringLiteral)),Comment,Comment, + SlangroomStatement(ThenStatement(Then,I,HelpersStatement(HelpersSend(send,object,StringLiteral,and,HelpersSend(send,path,StringLiteral,and,HelpersSend(send,value,StringLiteral,and,HelpersAction(manipulate,and,set))))))), + SlangroomStatement(ThenStatement(Then,I,HelpersStatement(HelpersSend(send,object,StringLiteral,and,HelpersSend(send,path,StringLiteral,and,HelpersSend(send,value,StringLiteral,and,HelpersAction(manipulate,and,set))))))), + SlangroomStatement(ThenStatement(Then,I,HelpersStatement(HelpersSend(send,object,StringLiteral,and,HelpersSend(send,path,StringLiteral,and,HelpersSend(send,value,StringLiteral,and,HelpersAction(manipulate,and,set))))))), + SlangroomStatement(ThenStatement(Then,I,HelpersStatement(HelpersSend(send,object,StringLiteral,and,HelpersSend(send,path,StringLiteral,and,HelpersSend(send,value,StringLiteral,and,HelpersAction(manipulate,and,set))))))), + SlangroomStatement(ThenStatement(Then,I,HelpersStatement(HelpersSend(send,object,StringLiteral,and,HelpersSend(send,path,StringLiteral,and,HelpersSend(send,value,StringLiteral,and,HelpersAction(manipulate,and,set))))))), + SlangroomStatement(ThenStatement(Then,I,HelpersStatement(HelpersSend(send,object,StringLiteral,and,HelpersSend(send,path,StringLiteral,and,HelpersSend(send,value,StringLiteral,and,HelpersAction(manipulate,and,set))))))), + SlangroomStatement(ThenStatement(Then,I,HelpersStatement(HelpersSend(send,object,StringLiteral,and,HelpersSend(send,path,StringLiteral,and,HelpersSend(send,value,StringLiteral,and,HelpersAction(manipulate,and,set))))))), + SlangroomStatement(ThenStatement(Then,I,HelpersStatement(HelpersSend(send,object,StringLiteral,and,HelpersSend(send,path,StringLiteral,and,HelpersSend(send,value,StringLiteral,and,HelpersAction(manipulate,and,set))))))), + SlangroomStatement(ThenStatement(Then,I,HelpersStatement(HelpersSend(send,object,StringLiteral,and,HelpersSend(send,path,StringLiteral,and,HelpersSend(send,value,StringLiteral,and,HelpersAction(manipulate,and,set))))))), + SlangroomStatement(ThenStatement(Then,I,HelpersStatement(HelpersSend(send,object,StringLiteral,and,HelpersSend(send,path,StringLiteral,and,HelpersSend(send,value,StringLiteral,and,HelpersAction(manipulate,and,set))))))), + SlangroomStatement(ThenStatement(Then,I,HelpersStatement(HelpersSend(send,object,StringLiteral,and,HelpersSend(send,path,StringLiteral,and,HelpersSend(send,value,StringLiteral,and,HelpersAction(manipulate,and,set))))))),Comment, + SlangroomStatement(ThenStatement(Then,I,FsStatement(FsConnectAction(FsSend(send,path,StringLiteral,and,FsAction(read,verbatim,file,content))),and,SaveAction(output,into,StringLiteral)))), + SlangroomStatement(ThenStatement(Then,I,ZencodeStatement(ZencodeSend(send,keys,StringLiteral,and,ZencodeSend(send,data,StringLiteral,and,ZencodeSend(send,script,StringLiteral,and,ZencodeAction(execute,zencode)))),and,SaveAction(output,into,StringLiteral)))), + SlangroomStatement(ThenStatement(Then,I,HelpersStatement(HelpersAction(manipulate,and,delete),and,SaveAction(output,into,StringLiteral)))), + SlangroomStatement(ThenStatement(Then,I,HelpersStatement(HelpersAction(manipulate,and,delete),and,SaveAction(output,into,StringLiteral)))),Comment, + SlangroomStatement(ThenStatement(Then,I,HttpStatement(HttpConnectAction(connect,to,StringLiteral,and,HttpSend(send,object,StringLiteral,and,HttpAction(do,post))),and,SaveAction(output,into,StringLiteral)))), + SlangroomStatement(ThenStatement(Then,I,HelpersStatement(HelpersAction(manipulate,and,delete),and,SaveAction(output,into,StringLiteral)))),Comment, + SlangroomStatement(ThenStatement(Then,I,HelpersStatement(HelpersSend(send,object,StringLiteral,and,HelpersSend(send,path,StringLiteral,and,HelpersAction(manipulate,and,get))),and,SaveAction(output,into,StringLiteral)))), + SlangroomStatement(ThenStatement(Then,I,HttpStatement(HttpConnectAction(connect,to,StringLiteral,and,HttpSend(send,object,StringLiteral,and,HttpAction(do,post))),and,SaveAction(output,into,StringLiteral)))), + SlangroomStatement(ThenStatement(Then,I,HelpersStatement(HelpersAction(manipulate,and,delete),and,SaveAction(output,into,StringLiteral)))), + SlangroomStatement(ThenStatement(Then,I,HelpersStatement(HelpersAction(manipulate,and,delete),and,SaveAction(output,into,StringLiteral)))),Comment, + SlangroomStatement(ThenStatement(Then,I,FsStatement(FsConnectAction(FsSend(send,path,StringLiteral,and,FsAction(read,file,content))),and,SaveAction(output,into,StringLiteral)))), + SlangroomStatement(ThenStatement(Then,I,FsStatement(FsConnectAction(FsSend(send,path,StringLiteral,and,FsAction(read,verbatim,file,content))),and,SaveAction(output,into,StringLiteral)))), + SlangroomStatement(ThenStatement(Then,I,ZencodeStatement(ZencodeSend(send,keys,StringLiteral,and,ZencodeSend(send,data,StringLiteral,and,ZencodeSend(send,script,StringLiteral,and,ZencodeAction(execute,zencode)))),and,SaveAction(output,into,StringLiteral)))), + SlangroomStatement(ThenStatement(Then,I,HelpersStatement(HelpersSend(send,object,StringLiteral,and,HelpersSend(send,path,StringLiteral,and,HelpersAction(manipulate,and,get))),and,SaveAction(output,into,StringLiteral)))), + SlangroomStatement(ThenStatement(Then,I,HelpersStatement(HelpersSend(send,object,StringLiteral,and,HelpersSend(send,path,StringLiteral,and,HelpersSend(send,value,StringLiteral,and,HelpersAction(manipulate,and,set))))))), + SlangroomStatement(ThenStatement(Then,I,HelpersStatement(HelpersSend(send,object,StringLiteral,and,HelpersSend(send,path,StringLiteral,and,HelpersSend(send,value,StringLiteral,and,HelpersAction(manipulate,and,set))))))), + SlangroomStatement(ThenStatement(Then,I,FsStatement(FsConnectAction(FsSend(send,path,StringLiteral,and,FsSend(send,content,StringLiteral,and,FsAction(store,in,file))))))), + SlangroomStatement(ThenStatement(Then,I,ShellStatement(ShellSend(send,command,StringLiteral,and,ShellAction(execute,in,shell))))), + SlangroomStatement(ThenStatement(Then,I,FsStatement(FsConnectAction(FsSend(send,path,StringLiteral,and,FsSend(send,content,StringLiteral,and,FsAction(store,in,file))))))), + SlangroomStatement(ThenStatement(Then,I,HelpersStatement(HelpersAction(manipulate,and,delete),and,SaveAction(output,into,StringLiteral)))), + SlangroomStatement(ThenStatement(Then,I,HelpersStatement(HelpersAction(manipulate,and,delete),and,SaveAction(output,into,StringLiteral)))), + SlangroomStatement(ThenStatement(Then,I,HelpersStatement(HelpersAction(manipulate,and,delete),and,SaveAction(output,into,StringLiteral)))), + SlangroomStatement(ThenStatement(Then,I,HelpersStatement(HelpersAction(manipulate,and,delete),and,SaveAction(output,into,StringLiteral)))), + SlangroomStatement(ThenStatement(Then,I,HelpersStatement(HelpersAction(manipulate,and,delete),and,SaveAction(output,into,StringLiteral)))), + SlangroomStatement(ThenStatement(Then,I,HelpersStatement(HelpersAction(manipulate,and,delete),and,SaveAction(output,into,StringLiteral))))) + +#Comment after Scenario + +Scenario eddsa: verify presentation +# this should not break comments + + +==> +Statement(ScenarioStatement(Scenario,ScenarioType(Identifier),ScenarioComment(Keywords(verify),Identifier)),Comment) + +#Foreach script + +Given I have a 'string array' named 'to_be_hashed' +Given I have a 'float' named 'begin' inside 'loop_parameters' +Given I have a 'float' named 'end' inside 'loop_parameters' +Given I have a 'float' named 'step' inside 'loop_parameters' +When I create the 'base64 array' named 'array of hashes' +Foreach 'element_to_be_hashed' inside 'to_be_hashed' +When I create the hash of 'element_to_be_hashed' +When I move 'hash' in 'array of hashes' +EndForeach +When I create the 'number array' named 'numbers' +Foreach 'number_in_array' in sequence from 'begin' to 'end' with step 'step' +When I move 'number_in_array' in 'numbers' +EndForeach +Then print 'array of hashes' +Then print 'to_be_hashed' +Then print 'numbers' + +==> +Statement(SlangroomStatement(GivenHaveStatement(Given,I,have,a,StringLiteral,named,StringLiteral)),SlangroomStatement(GivenHaveStatement(Given,I,have,a,StringLiteral,named,StringLiteral,inside,StringLiteral)), + SlangroomStatement(GivenHaveStatement(Given,I,have,a,StringLiteral,named,StringLiteral,inside,StringLiteral)),SlangroomStatement(GivenHaveStatement(Given,I,have,a,StringLiteral,named,StringLiteral,inside,StringLiteral)), + SlangroomStatement(WhenStatement(When,I,Keywords(create),Keywords(the),StringLiteral,Keywords(named),StringLiteral)),SlangroomStatement(ForEachStatement(Foreach,StringLiteral,inside,StringLiteral, + WhenStatement(When,I,Keywords(create),Keywords(the),Identifier,Keywords(of),StringLiteral),WhenStatement(When,I,Identifier,StringLiteral,Keywords(in),StringLiteral),EndForeach)), + SlangroomStatement(WhenStatement(When,I,Keywords(create),Keywords(the),StringLiteral,Keywords(named),StringLiteral)),SlangroomStatement(ForEachStatement(Foreach,StringLiteral,in,Identifier,Keywords(from),StringLiteral,Keywords(to),StringLiteral,Keywords(with),Identifier,StringLiteral, + WhenStatement(When,I,Identifier,StringLiteral,Keywords(in),StringLiteral),EndForeach)),SlangroomStatement(ThenPrint(Then,print,StringLiteral)),SlangroomStatement(ThenPrint(Then,print,StringLiteral)), + SlangroomStatement(ThenPrint(Then,print,StringLiteral)))