diff --git a/.gitignore b/.gitignore index 14a297ec..eccffa66 100644 --- a/.gitignore +++ b/.gitignore @@ -84,6 +84,8 @@ node_modules !/grammar/src/lint.ts !/grammar/utils/package.json !/grammar/utils/prepare_complete.mjs +!/grammar/utils/syntax.grammar.template +!/grammar/utils/tokens.template # oauth test stuff pkg/oauth/test/didroom_microservices/ diff --git a/grammar/.npmignore b/grammar/.npmignore index 5b86acff..5c23a121 100644 --- a/grammar/.npmignore +++ b/grammar/.npmignore @@ -4,6 +4,10 @@ /src /test +/utils /node_modules rollup.config.js tsconfig.json +tsconfig.json.license +.releaserc +package.json.license diff --git a/grammar/src/index.ts b/grammar/src/index.ts index a84e1f83..792a673e 100644 --- a/grammar/src/index.ts +++ b/grammar/src/index.ts @@ -33,12 +33,11 @@ export const SlangroomLanguage = LRLanguage.define({ parser: parser.configure({ props: [ styleTags({ - 'given then when and in inside if endif foreach endforeach': t.variableName, - 'have send open connect print output': t.keyword, + 'given then when and in inside if endif foreach endforeach prepare compute': t.variableName, + 'have send open connect print output with where secret': t.keyword, 'rule VersionRule! 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, + 'Action!': t.heading2, StringLiteral: t.string, Comment: t.lineComment, }), diff --git a/grammar/src/syntax.grammar b/grammar/src/syntax.grammar index acc90533..4dd8397f 100644 --- a/grammar/src/syntax.grammar +++ b/grammar/src/syntax.grammar @@ -3,424 +3,461 @@ // SPDX-License-Identifier: AGPL-3.0-or-later @top Statement { - ( RuleStatement | ScenarioStatement | RuleStatement | SlangroomStatement | Comment )* + ( RuleStatement | ScenarioStatement | RuleStatement | SlangroomStatement | Comment )* } Comment { - comment (newline+ |eof) + comment (newline+ |eof) } SlangroomStatement { - (GivenStatement | ThenStatement | ThenPrint | GivenHaveStatement | GivenName | WhenStatement | IfEndifStatement |ForEachStatement) + (GtStatement | PcStatement | ThenPrint | GivenHaveStatement | GivenName | WhenStatement | IfEndifStatement |ForEachStatement) } +// ===== Rule ===== RuleStatement { rule (VersionRule | GenericRule) ( newline+ | eof ) } - -ScenarioStatement { - scenario ScenarioType ScenarioComment? ( newline+ | eof ) -} -ScenarioType { - (StringLiteral| Identifier | Keywords) -} -ScenarioComment { - ":" (Identifier | Keywords | StringLiteral)* -} VersionRule { version VersionNumber } - GenericRule { - (Identifier | StringLiteral | Keywords)* + (Keywords | Identifier | StringLiteral)* } - VersionNumber { Number '.'? Number? '.'? Number? } -@skip { - space +// ===== Scenario ===== +ScenarioStatement { + scenario ScenarioType ScenarioComment? ( newline+ | eof ) } - -GivenStatement { - given I - (DbStatement | EthereumStatement | FsStatement | GitStatement | HelpersStatement | HttpStatement | JsonSchemaStatement | OAuthStatement | PocketbaseStatement | QrCodeStatement | RedisStatement | ShellStatement | TimestampStatement | WalletStatement | ZencodeStatement) - ( newline+ | eof ) +ScenarioType { + (Keywords | StringLiteral| Identifier) } - -ThenStatement { - then I - (DbStatement | EthereumStatement | FsStatement | GitStatement | HelpersStatement | HttpStatement | JsonSchemaStatement | OAuthStatement | PocketbaseStatement | QrCodeStatement | RedisStatement | ShellStatement | TimestampStatement | WalletStatement | ZencodeStatement) - ( newline+ | eof ) +ScenarioComment { + ":" (Keywords | Identifier | StringLiteral)* } -ThenPrint { - then I? print (StringLiteral | Identifier | Keywords)+ (newline and +I print (StringLiteral | Identifier | Keywords)+)* ( newline+ | eof ) +@skip { + space } +// ===== Zencode Statements ===== GivenHaveStatement { given that? I have (a? | my? | the?) valid? StringLiteral named? StringLiteral? (inside | in)? named? StringLiteral? (newline* and I have (a? | my?) valid? StringLiteral named? StringLiteral? (inside | in)? named? StringLiteral?)* ( newline+ | eof ) } -HaveStatement{ - newline+ and I have (a? | my?) valid? StringLiteral named? StringLiteral? (inside | in)? named? StringLiteral? -} - GivenName { ((given I am (known as)? StringLiteral) | - (given I? my name is - (Identifier | Keywords | StringLiteral)+)) HaveStatement* ( newline+ | eof ) - + (given I? my name is + (Keywords | Identifier | StringLiteral)+)) HaveStatement* ( newline+ | eof ) +} +HaveStatement{ + newline+ and I have (a? | my?) valid? StringLiteral named? StringLiteral? (inside | in)? named? StringLiteral? } - WhenStatement { - when I (Identifier | Keywords | StringLiteral)+ (newline and I (Identifier | Keywords | StringLiteral)+)* (newline+ | eof) + when I (Keywords | Identifier | StringLiteral)+ (newline and I (Keywords | Identifier | StringLiteral)+)* (newline+ | eof) } - IfEndifStatement{ - Condition+ ( GivenStatement | WhenStatement | ThenStatement | ThenPrint)* endif ( newline+ | eof ) + Condition (IfEndifStatement | WhenStatement | ThenPrint)* endif ( newline+ | eof ) } - Condition { - if I verify (Identifier | Keywords | StringLiteral)+ ( newline+ | eof ) + if I verify (Keywords | Identifier | StringLiteral)+ ( newline+ | eof ) } - ForEachStatement { - foreach (StringLiteral | Identifier | Keywords) (in | inside) (StringLiteral | Identifier | Keywords)+ newline+ (GivenStatement | WhenStatement | ThenStatement | ThenPrint)* - endforeach ( newline+ | eof ) -} - -// ===== Plugin-Specific Statements ===== - -DbStatement { - DbConnectAction (and? SaveAction)* -} - -EthereumStatement { - EthereumConnectAction (and? SaveAction)* -} - -FsStatement { - FsConnectAction (and? SaveAction)* -} - -GitStatement { - GitOpenOrConnectAction (and? SaveAction)* -} - -HelpersStatement { - (HelpersSend | HelpersAction) (and? SaveAction)* -} - -HttpStatement { - HttpConnectAction (and? SaveAction)* -} - -JsonSchemaStatement { - JsonSchemaSend (and? SaveAction)* -} - -OAuthStatement { - OAuthSend (and? SaveAction)* -} - -PocketbaseStatement { - PocketbaseConnectAction (and? SaveAction)* -} - -QrCodeStatement { - QrCodeSend (and? SaveAction)* -} - -RedisStatement { - RedisConnectAction (and? SaveAction)* -} - -ShellStatement { - ShellSend (and? SaveAction)* -} - -TimestampStatement { - TimestampAction (and? SaveAction)* -} - -WalletStatement { - (WalletSend| WalletAction) (and? SaveAction)* -} - -ZencodeStatement { - ZencodeSend (and? SaveAction)* -} - -// ===== Connect Actions ===== - -DbConnectAction { - ((connect to StringLiteral) and)? DbSend -} - -EthereumConnectAction { - ((connect to StringLiteral) and)? (EthereumSend | EthereumAction) -} - -FsConnectAction { - ((connect to StringLiteral) and)? FsSend -} - -GitOpenOrConnectAction { - ((open the StringLiteral | connect to StringLiteral) and)? (GitSend | GitAction) -} - -HttpConnectAction { - ((connect to StringLiteral) and)? (HttpSend | HttpAction) -} - -PocketbaseConnectAction { - ((connect to StringLiteral) and)? (PocketbaseSend | PocketbaseAction) -} - -RedisConnectAction { - ((connect to StringLiteral) and)? RedisSend -} - -// ===== Send Actions ===== - -DbSend { - ((send (statement | parameters | record | table | variable | name) StringLiteral) and) - (DbAction | DbSend ) -} - -EthereumSend { - ((send (address | transaction_id | addresses | transaction | sc) StringLiteral) and) - (EthereumAction | EthereumSend) -} - -FsSend { - ((send (path | content) StringLiteral) and) - (FsAction | FsSend) -} - -GitSend { - ((send (path | commit) StringLiteral) and) GitAction -} - -HelpersSend { - ((send (path | paths | object | value | sources | array | values | properties) StringLiteral) and) - (HelpersAction | HelpersSend) -} - -HttpSend { - ((send (headers | object) StringLiteral) and) - (HttpAction | HttpSend) -} - -JsonSchemaSend { - ((send (json_data | json_schema) StringLiteral) and) - (JsonSchemaAction | JsonSchemaSend) -} - -OAuthSend { - ((send (request | server_data | client | expires_in | token | request_uri | data) StringLiteral) and) - (OAuthAction | OAuthSend) -} - -PocketbaseSend { - ((send (my_credentials | email | list_parameters | show_parameters | create_parameters | record_parameters | update_parameters | delete_parameters | url | send_parameters) StringLiteral) and) - (PocketbaseAction | PocketbaseSend) -} - -QrCodeSend { - ((send text StringLiteral) and) QrCodeAction -} - -RedisSend { - ((send (key | object) StringLiteral) and) - (RedisAction | RedisSend) + foreach (Keywords | StringLiteral | Identifier) (in | inside) (Keywords | StringLiteral | Identifier)+ newline+ (ForEachStatement | IfEndifStatement | WhenStatement)* + endforeach ( newline+ | eof ) } - -ShellSend { - ((send (command) StringLiteral) and) ShellAction -} - -WalletSend { - ((send (jwk | object | holder | fields | verifier_url | issued_vc | disclosed | nonce | sk | token) StringLiteral) and) - (WalletAction | WalletSend) -} - -ZencodeSend { - ((send (script | data | keys | extra | conf) StringLiteral) and) - (ZencodeAction | ZencodeSend) -} - -// ===== Execute Actions ===== - -DbAction { - execute sql statement | - execute sql statement with parameters | - read the record of the table | - save the variable in the database table -} - -EthereumAction { - read the ethereum? nonce | - read the ethereum? bytes | - read the ethereum? balance | - read the ethereum? suggested gas price | - read the ethereum? transaction id after broadcast | - read the erc20 decimals | - read the erc20 name | - read the erc20 symbol | - read the erc20 balance | - read the erc20 total supply | - read the erc721 id in transaction | - read the erc721 owner | - read the erc721 asset -} - -FsAction { - download and extract | - read file content | - read verbatim file content | - store in file | - list directory content | - verify file exists | - verify file does not exist -} - -GitAction { - verify git repository | - clone repository | - create new git commit -} - -HelpersAction { - manipulate and get | - manipulate and set | - manipulate and merge | - manipulate and omit | - manipulate and concat | - manipulate and compact | - manipulate and pick | - manipulate and delete -} - -HttpAction { - do get | - do sequential get | - do parallel get | - do same get | - do post | - do sequential post | - do parallel post | - do same post | - do put | - do sequential put | - do parallel put | - do same put | - do patch | - do sequential patch | - do parallel patch | - do same patch | - do delete | - do sequential delete | - do parallel delete | - do same delete -} - -JsonSchemaAction { - validate json -} - -OAuthAction { - generate access token | - verify request parameters | - generate authorization code | - generate request uri | - get authorization details from token | - add data to authorization details -} - -PocketbaseAction { - start pb client | - start capacitor pb client | - login | - ask password reset | - get some records | - get one record | - create record | - update record | - delete record | - send request -} - -QrCodeAction { - create qr code +ThenPrint { + then I? print (Keywords | StringLiteral | Identifier)+ (newline and +I print (Keywords | StringLiteral | Identifier)+)* ( newline+ | eof ) } -RedisAction { - write object into key in redis | - read key from redis | - delete key from redis +// ===== Slangroom Statements ===== +GtStatement { + (given | then) I + (GtDbStatement |GtEthereumStatement |GtFsStatement |GtGitStatement |GtHelpersStatement |GtHttpStatement |GtJsonSchemaStatement |GtOAuthStatement |GtPocketbaseStatement |GtQrCodeStatement |GtRdfStatement |GtRedisStatement |GtShellStatement |GtTimestampStatement |GtWalletStatement |GtZencodeStatement) + ( newline+ | eof ) } - -ShellAction { - execute in shell +PcStatement { + (prepare | compute) (secret)? StringLiteral?':' + (PcDbStatement |PcEthereumStatement |PcFsStatement |PcGitStatement |PcHelpersStatement |PcHttpStatement |PcJsonSchemaStatement |PcOAuthStatement |PcPocketbaseStatement |PcQrCodeStatement |PcRdfStatement |PcRedisStatement |PcShellStatement |PcTimestampStatement |PcWalletStatement |PcZencodeStatement) + ( newline+ | eof ) } -TimestampAction { - fetch the local timestamp in milliseconds | - fetch the local timestamp in seconds -} +// ===== Plugin-Specific Statements ===== -WalletAction { - create vc sd jwt | - present vc sd jwt | - verify vc sd jwt | - create p256 key | - create p256 public key | - pretty print sd jwt -} -ZencodeAction { - execute zencode +GtDbStatement { + connect to StringLiteral and send statement StringLiteral and Action SaveAction? | + connect to StringLiteral and ( send statement StringLiteral and send parameters StringLiteral and |send parameters StringLiteral and send statement StringLiteral and ) Action SaveAction? | + connect to StringLiteral and ( send record StringLiteral and send table StringLiteral and |send table StringLiteral and send record StringLiteral and ) Action SaveAction? | + connect to StringLiteral and ( send variable StringLiteral and send name StringLiteral and send table StringLiteral and |send variable StringLiteral and send table StringLiteral and send name StringLiteral and |send name StringLiteral and send variable StringLiteral and send table StringLiteral and |send name StringLiteral and send table StringLiteral and send variable StringLiteral and |send table StringLiteral and send variable StringLiteral and send name StringLiteral and |send table StringLiteral and send name StringLiteral and send variable StringLiteral and ) Action SaveAction? +} +PcDbStatement { + connect to StringLiteral and Action (with | where) statement is? StringLiteral | + connect to StringLiteral and Action (with | where)( statement is? StringLiteral"," parameters is? StringLiteral| parameters is? StringLiteral"," statement is? StringLiteral) | + connect to StringLiteral and Action (with | where)( record is? StringLiteral"," table is? StringLiteral| table is? StringLiteral"," record is? StringLiteral) | + connect to StringLiteral and Action (with | where)( variable is? StringLiteral"," name is? StringLiteral"," table is? StringLiteral| variable is? StringLiteral"," table is? StringLiteral"," name is? StringLiteral| name is? StringLiteral"," variable is? StringLiteral"," table is? StringLiteral| name is? StringLiteral"," table is? StringLiteral"," variable is? StringLiteral| table is? StringLiteral"," variable is? StringLiteral"," name is? StringLiteral| table is? StringLiteral"," name is? StringLiteral"," variable is? StringLiteral) +} +GtEthereumStatement { + connect to StringLiteral and send address StringLiteral and Action SaveAction? | + connect to StringLiteral and send transaction_id StringLiteral and Action SaveAction? | + connect to StringLiteral and send address StringLiteral and Action SaveAction? | + connect to StringLiteral and send addresses StringLiteral and Action SaveAction? | + connect to StringLiteral and Action SaveAction? | + connect to StringLiteral and send transaction StringLiteral and Action SaveAction? | + connect to StringLiteral and send sc StringLiteral and Action SaveAction? | + connect to StringLiteral and send sc StringLiteral and Action SaveAction? | + connect to StringLiteral and send sc StringLiteral and Action SaveAction? | + connect to StringLiteral and ( send sc StringLiteral and send address StringLiteral and |send address StringLiteral and send sc StringLiteral and ) Action SaveAction? | + connect to StringLiteral and send sc StringLiteral and Action SaveAction? | + connect to StringLiteral and send transaction_id StringLiteral and Action SaveAction? | + connect to StringLiteral and Action SaveAction? | + connect to StringLiteral and Action SaveAction? +} +PcEthereumStatement { + connect to StringLiteral and Action (with | where) address is? StringLiteral | + connect to StringLiteral and Action (with | where) transaction_id is? StringLiteral | + connect to StringLiteral and Action (with | where) address is? StringLiteral | + connect to StringLiteral and Action (with | where) addresses is? StringLiteral | + connect to StringLiteral and Action | + connect to StringLiteral and Action (with | where) transaction is? StringLiteral | + connect to StringLiteral and Action (with | where) sc is? StringLiteral | + connect to StringLiteral and Action (with | where) sc is? StringLiteral | + connect to StringLiteral and Action (with | where) sc is? StringLiteral | + connect to StringLiteral and Action (with | where)( sc is? StringLiteral"," address is? StringLiteral| address is? StringLiteral"," sc is? StringLiteral) | + connect to StringLiteral and Action (with | where) sc is? StringLiteral | + connect to StringLiteral and Action (with | where) transaction_id is? StringLiteral | + connect to StringLiteral and Action | + connect to StringLiteral and Action +} +GtFsStatement { + connect to StringLiteral and send path StringLiteral and Action SaveAction? | + send path StringLiteral and Action SaveAction? | + send path StringLiteral and Action SaveAction? | + ( send content StringLiteral and send path StringLiteral and |send path StringLiteral and send content StringLiteral and ) Action SaveAction? | + send path StringLiteral and Action SaveAction? | + send path StringLiteral and Action SaveAction? | + send path StringLiteral and Action SaveAction? +} +PcFsStatement { + connect to StringLiteral and Action (with | where) path is? StringLiteral | + Action (with | where) path is? StringLiteral | + Action (with | where) path is? StringLiteral | + Action (with | where)( content is? StringLiteral"," path is? StringLiteral| path is? StringLiteral"," content is? StringLiteral) | + Action (with | where) path is? StringLiteral | + Action (with | where) path is? StringLiteral | + Action (with | where) path is? StringLiteral +} +GtGitStatement { + open StringLiteral and Action SaveAction? | + connect to StringLiteral and send path StringLiteral and Action SaveAction? | + open StringLiteral and send commit StringLiteral and Action SaveAction? +} +PcGitStatement { + open StringLiteral and Action | + connect to StringLiteral and Action (with | where) path is? StringLiteral | + open StringLiteral and Action (with | where) commit is? StringLiteral +} +GtHelpersStatement { + ( send object StringLiteral and send path StringLiteral and |send path StringLiteral and send object StringLiteral and ) Action SaveAction? | + ( send object StringLiteral and send path StringLiteral and send value StringLiteral and |send object StringLiteral and send value StringLiteral and send path StringLiteral and |send path StringLiteral and send object StringLiteral and send value StringLiteral and |send path StringLiteral and send value StringLiteral and send object StringLiteral and |send value StringLiteral and send object StringLiteral and send path StringLiteral and |send value StringLiteral and send path StringLiteral and send object StringLiteral and ) Action SaveAction? | + ( send object StringLiteral and send sources StringLiteral and |send sources StringLiteral and send object StringLiteral and ) Action SaveAction? | + ( send object StringLiteral and send paths StringLiteral and |send paths StringLiteral and send object StringLiteral and ) Action SaveAction? | + ( send array StringLiteral and send values StringLiteral and |send values StringLiteral and send array StringLiteral and ) Action SaveAction? | + send array StringLiteral and Action SaveAction? | + ( send object StringLiteral and send properties StringLiteral and |send properties StringLiteral and send object StringLiteral and ) Action SaveAction? | + Action SaveAction? +} +PcHelpersStatement { + Action (with | where)( object is? StringLiteral"," path is? StringLiteral| path is? StringLiteral"," object is? StringLiteral) | + Action (with | where)( object is? StringLiteral"," path is? StringLiteral"," value is? StringLiteral| object is? StringLiteral"," value is? StringLiteral"," path is? StringLiteral| path is? StringLiteral"," object is? StringLiteral"," value is? StringLiteral| path is? StringLiteral"," value is? StringLiteral"," object is? StringLiteral| value is? StringLiteral"," object is? StringLiteral"," path is? StringLiteral| value is? StringLiteral"," path is? StringLiteral"," object is? StringLiteral) | + Action (with | where)( object is? StringLiteral"," sources is? StringLiteral| sources is? StringLiteral"," object is? StringLiteral) | + Action (with | where)( object is? StringLiteral"," paths is? StringLiteral| paths is? StringLiteral"," object is? StringLiteral) | + Action (with | where)( array is? StringLiteral"," values is? StringLiteral| values is? StringLiteral"," array is? StringLiteral) | + Action (with | where) array is? StringLiteral | + Action (with | where)( object is? StringLiteral"," properties is? StringLiteral| properties is? StringLiteral"," object is? StringLiteral) | + Action +} +GtHttpStatement { + connect to StringLiteral and Action SaveAction? | + connect to StringLiteral and send headers StringLiteral and Action SaveAction? | + connect to StringLiteral and Action SaveAction? | + connect to StringLiteral and send headers StringLiteral and Action SaveAction? | + connect to StringLiteral and Action SaveAction? | + connect to StringLiteral and send headers StringLiteral and Action SaveAction? | + connect to StringLiteral and Action SaveAction? | + connect to StringLiteral and send headers StringLiteral and Action SaveAction? | + connect to StringLiteral and Action SaveAction? | + connect to StringLiteral and send headers StringLiteral and Action SaveAction? | + connect to StringLiteral and send object StringLiteral and Action SaveAction? | + connect to StringLiteral and ( send object StringLiteral and send headers StringLiteral and |send headers StringLiteral and send object StringLiteral and ) Action SaveAction? | + connect to StringLiteral and Action SaveAction? | + connect to StringLiteral and send headers StringLiteral and Action SaveAction? | + connect to StringLiteral and send object StringLiteral and Action SaveAction? | + connect to StringLiteral and ( send object StringLiteral and send headers StringLiteral and |send headers StringLiteral and send object StringLiteral and ) Action SaveAction? | + connect to StringLiteral and Action SaveAction? | + connect to StringLiteral and send headers StringLiteral and Action SaveAction? | + connect to StringLiteral and send object StringLiteral and Action SaveAction? | + connect to StringLiteral and ( send object StringLiteral and send headers StringLiteral and |send headers StringLiteral and send object StringLiteral and ) Action SaveAction? | + connect to StringLiteral and Action SaveAction? | + connect to StringLiteral and send headers StringLiteral and Action SaveAction? | + connect to StringLiteral and send object StringLiteral and Action SaveAction? | + connect to StringLiteral and ( send object StringLiteral and send headers StringLiteral and |send headers StringLiteral and send object StringLiteral and ) Action SaveAction? | + connect to StringLiteral and Action SaveAction? | + connect to StringLiteral and send headers StringLiteral and Action SaveAction? | + connect to StringLiteral and send object StringLiteral and Action SaveAction? | + connect to StringLiteral and ( send object StringLiteral and send headers StringLiteral and |send headers StringLiteral and send object StringLiteral and ) Action SaveAction? | + connect to StringLiteral and Action SaveAction? | + connect to StringLiteral and send headers StringLiteral and Action SaveAction? | + connect to StringLiteral and send object StringLiteral and Action SaveAction? | + connect to StringLiteral and ( send object StringLiteral and send headers StringLiteral and |send headers StringLiteral and send object StringLiteral and ) Action SaveAction? | + connect to StringLiteral and Action SaveAction? | + connect to StringLiteral and send headers StringLiteral and Action SaveAction? | + connect to StringLiteral and send object StringLiteral and Action SaveAction? | + connect to StringLiteral and ( send object StringLiteral and send headers StringLiteral and |send headers StringLiteral and send object StringLiteral and ) Action SaveAction? | + connect to StringLiteral and Action SaveAction? | + connect to StringLiteral and send headers StringLiteral and Action SaveAction? | + connect to StringLiteral and send object StringLiteral and Action SaveAction? | + connect to StringLiteral and ( send object StringLiteral and send headers StringLiteral and |send headers StringLiteral and send object StringLiteral and ) Action SaveAction? | + connect to StringLiteral and Action SaveAction? | + connect to StringLiteral and send headers StringLiteral and Action SaveAction? | + connect to StringLiteral and send object StringLiteral and Action SaveAction? | + connect to StringLiteral and ( send object StringLiteral and send headers StringLiteral and |send headers StringLiteral and send object StringLiteral and ) Action SaveAction? | + connect to StringLiteral and Action SaveAction? | + connect to StringLiteral and send headers StringLiteral and Action SaveAction? | + connect to StringLiteral and send object StringLiteral and Action SaveAction? | + connect to StringLiteral and ( send object StringLiteral and send headers StringLiteral and |send headers StringLiteral and send object StringLiteral and ) Action SaveAction? | + connect to StringLiteral and Action SaveAction? | + connect to StringLiteral and send headers StringLiteral and Action SaveAction? | + connect to StringLiteral and send object StringLiteral and Action SaveAction? | + connect to StringLiteral and ( send object StringLiteral and send headers StringLiteral and |send headers StringLiteral and send object StringLiteral and ) Action SaveAction? | + connect to StringLiteral and Action SaveAction? | + connect to StringLiteral and send headers StringLiteral and Action SaveAction? | + connect to StringLiteral and send object StringLiteral and Action SaveAction? | + connect to StringLiteral and ( send object StringLiteral and send headers StringLiteral and |send headers StringLiteral and send object StringLiteral and ) Action SaveAction? | + connect to StringLiteral and Action SaveAction? | + connect to StringLiteral and send headers StringLiteral and Action SaveAction? | + connect to StringLiteral and send object StringLiteral and Action SaveAction? | + connect to StringLiteral and ( send object StringLiteral and send headers StringLiteral and |send headers StringLiteral and send object StringLiteral and ) Action SaveAction? | + connect to StringLiteral and Action SaveAction? | + connect to StringLiteral and send headers StringLiteral and Action SaveAction? | + connect to StringLiteral and send object StringLiteral and Action SaveAction? | + connect to StringLiteral and ( send object StringLiteral and send headers StringLiteral and |send headers StringLiteral and send object StringLiteral and ) Action SaveAction? | + connect to StringLiteral and Action SaveAction? | + connect to StringLiteral and send headers StringLiteral and Action SaveAction? | + connect to StringLiteral and send object StringLiteral and Action SaveAction? | + connect to StringLiteral and ( send object StringLiteral and send headers StringLiteral and |send headers StringLiteral and send object StringLiteral and ) Action SaveAction? | + connect to StringLiteral and Action SaveAction? | + connect to StringLiteral and send headers StringLiteral and Action SaveAction? | + connect to StringLiteral and send object StringLiteral and Action SaveAction? | + connect to StringLiteral and ( send object StringLiteral and send headers StringLiteral and |send headers StringLiteral and send object StringLiteral and ) Action SaveAction? +} +PcHttpStatement { + connect to StringLiteral and Action | + connect to StringLiteral and Action (with | where) headers is? StringLiteral | + connect to StringLiteral and Action | + connect to StringLiteral and Action (with | where) headers is? StringLiteral | + connect to StringLiteral and Action | + connect to StringLiteral and Action (with | where) headers is? StringLiteral | + connect to StringLiteral and Action | + connect to StringLiteral and Action (with | where) headers is? StringLiteral | + connect to StringLiteral and Action | + connect to StringLiteral and Action (with | where) headers is? StringLiteral | + connect to StringLiteral and Action (with | where) object is? StringLiteral | + connect to StringLiteral and Action (with | where)( object is? StringLiteral"," headers is? StringLiteral| headers is? StringLiteral"," object is? StringLiteral) | + connect to StringLiteral and Action | + connect to StringLiteral and Action (with | where) headers is? StringLiteral | + connect to StringLiteral and Action (with | where) object is? StringLiteral | + connect to StringLiteral and Action (with | where)( object is? StringLiteral"," headers is? StringLiteral| headers is? StringLiteral"," object is? StringLiteral) | + connect to StringLiteral and Action | + connect to StringLiteral and Action (with | where) headers is? StringLiteral | + connect to StringLiteral and Action (with | where) object is? StringLiteral | + connect to StringLiteral and Action (with | where)( object is? StringLiteral"," headers is? StringLiteral| headers is? StringLiteral"," object is? StringLiteral) | + connect to StringLiteral and Action | + connect to StringLiteral and Action (with | where) headers is? StringLiteral | + connect to StringLiteral and Action (with | where) object is? StringLiteral | + connect to StringLiteral and Action (with | where)( object is? StringLiteral"," headers is? StringLiteral| headers is? StringLiteral"," object is? StringLiteral) | + connect to StringLiteral and Action | + connect to StringLiteral and Action (with | where) headers is? StringLiteral | + connect to StringLiteral and Action (with | where) object is? StringLiteral | + connect to StringLiteral and Action (with | where)( object is? StringLiteral"," headers is? StringLiteral| headers is? StringLiteral"," object is? StringLiteral) | + connect to StringLiteral and Action | + connect to StringLiteral and Action (with | where) headers is? StringLiteral | + connect to StringLiteral and Action (with | where) object is? StringLiteral | + connect to StringLiteral and Action (with | where)( object is? StringLiteral"," headers is? StringLiteral| headers is? StringLiteral"," object is? StringLiteral) | + connect to StringLiteral and Action | + connect to StringLiteral and Action (with | where) headers is? StringLiteral | + connect to StringLiteral and Action (with | where) object is? StringLiteral | + connect to StringLiteral and Action (with | where)( object is? StringLiteral"," headers is? StringLiteral| headers is? StringLiteral"," object is? StringLiteral) | + connect to StringLiteral and Action | + connect to StringLiteral and Action (with | where) headers is? StringLiteral | + connect to StringLiteral and Action (with | where) object is? StringLiteral | + connect to StringLiteral and Action (with | where)( object is? StringLiteral"," headers is? StringLiteral| headers is? StringLiteral"," object is? StringLiteral) | + connect to StringLiteral and Action | + connect to StringLiteral and Action (with | where) headers is? StringLiteral | + connect to StringLiteral and Action (with | where) object is? StringLiteral | + connect to StringLiteral and Action (with | where)( object is? StringLiteral"," headers is? StringLiteral| headers is? StringLiteral"," object is? StringLiteral) | + connect to StringLiteral and Action | + connect to StringLiteral and Action (with | where) headers is? StringLiteral | + connect to StringLiteral and Action (with | where) object is? StringLiteral | + connect to StringLiteral and Action (with | where)( object is? StringLiteral"," headers is? StringLiteral| headers is? StringLiteral"," object is? StringLiteral) | + connect to StringLiteral and Action | + connect to StringLiteral and Action (with | where) headers is? StringLiteral | + connect to StringLiteral and Action (with | where) object is? StringLiteral | + connect to StringLiteral and Action (with | where)( object is? StringLiteral"," headers is? StringLiteral| headers is? StringLiteral"," object is? StringLiteral) | + connect to StringLiteral and Action | + connect to StringLiteral and Action (with | where) headers is? StringLiteral | + connect to StringLiteral and Action (with | where) object is? StringLiteral | + connect to StringLiteral and Action (with | where)( object is? StringLiteral"," headers is? StringLiteral| headers is? StringLiteral"," object is? StringLiteral) | + connect to StringLiteral and Action | + connect to StringLiteral and Action (with | where) headers is? StringLiteral | + connect to StringLiteral and Action (with | where) object is? StringLiteral | + connect to StringLiteral and Action (with | where)( object is? StringLiteral"," headers is? StringLiteral| headers is? StringLiteral"," object is? StringLiteral) | + connect to StringLiteral and Action | + connect to StringLiteral and Action (with | where) headers is? StringLiteral | + connect to StringLiteral and Action (with | where) object is? StringLiteral | + connect to StringLiteral and Action (with | where)( object is? StringLiteral"," headers is? StringLiteral| headers is? StringLiteral"," object is? StringLiteral) | + connect to StringLiteral and Action | + connect to StringLiteral and Action (with | where) headers is? StringLiteral | + connect to StringLiteral and Action (with | where) object is? StringLiteral | + connect to StringLiteral and Action (with | where)( object is? StringLiteral"," headers is? StringLiteral| headers is? StringLiteral"," object is? StringLiteral) | + connect to StringLiteral and Action | + connect to StringLiteral and Action (with | where) headers is? StringLiteral | + connect to StringLiteral and Action (with | where) object is? StringLiteral | + connect to StringLiteral and Action (with | where)( object is? StringLiteral"," headers is? StringLiteral| headers is? StringLiteral"," object is? StringLiteral) +} +GtJsonSchemaStatement { + ( send json_data StringLiteral and send json_schema StringLiteral and |send json_schema StringLiteral and send json_data StringLiteral and ) Action SaveAction? +} +PcJsonSchemaStatement { + Action (with | where)( json_data is? StringLiteral"," json_schema is? StringLiteral| json_schema is? StringLiteral"," json_data is? StringLiteral) +} +GtOAuthStatement { + ( send request StringLiteral and send server_data StringLiteral and |send server_data StringLiteral and send request StringLiteral and ) Action SaveAction? | + ( send request StringLiteral and send server_data StringLiteral and |send server_data StringLiteral and send request StringLiteral and ) Action SaveAction? | + ( send request StringLiteral and send server_data StringLiteral and |send server_data StringLiteral and send request StringLiteral and ) Action SaveAction? | + ( send request StringLiteral and send client StringLiteral and send server_data StringLiteral and send expires_in StringLiteral and |send request StringLiteral and send client StringLiteral and send expires_in StringLiteral and send server_data StringLiteral and |send request StringLiteral and send server_data StringLiteral and send client StringLiteral and send expires_in StringLiteral and |send request StringLiteral and send server_data StringLiteral and send expires_in StringLiteral and send client StringLiteral and |send request StringLiteral and send expires_in StringLiteral and send client StringLiteral and send server_data StringLiteral and |send request StringLiteral and send expires_in StringLiteral and send server_data StringLiteral and send client StringLiteral and |send client StringLiteral and send request StringLiteral and send server_data StringLiteral and send expires_in StringLiteral and |send client StringLiteral and send request StringLiteral and send expires_in StringLiteral and send server_data StringLiteral and |send client StringLiteral and send server_data StringLiteral and send request StringLiteral and send expires_in StringLiteral and |send client StringLiteral and send server_data StringLiteral and send expires_in StringLiteral and send request StringLiteral and |send client StringLiteral and send expires_in StringLiteral and send request StringLiteral and send server_data StringLiteral and |send client StringLiteral and send expires_in StringLiteral and send server_data StringLiteral and send request StringLiteral and |send server_data StringLiteral and send request StringLiteral and send client StringLiteral and send expires_in StringLiteral and |send server_data StringLiteral and send request StringLiteral and send expires_in StringLiteral and send client StringLiteral and |send server_data StringLiteral and send client StringLiteral and send request StringLiteral and send expires_in StringLiteral and |send server_data StringLiteral and send client StringLiteral and send expires_in StringLiteral and send request StringLiteral and |send server_data StringLiteral and send expires_in StringLiteral and send request StringLiteral and send client StringLiteral and |send server_data StringLiteral and send expires_in StringLiteral and send client StringLiteral and send request StringLiteral and |send expires_in StringLiteral and send request StringLiteral and send client StringLiteral and send server_data StringLiteral and |send expires_in StringLiteral and send request StringLiteral and send server_data StringLiteral and send client StringLiteral and |send expires_in StringLiteral and send client StringLiteral and send request StringLiteral and send server_data StringLiteral and |send expires_in StringLiteral and send client StringLiteral and send server_data StringLiteral and send request StringLiteral and |send expires_in StringLiteral and send server_data StringLiteral and send request StringLiteral and send client StringLiteral and |send expires_in StringLiteral and send server_data StringLiteral and send client StringLiteral and send request StringLiteral and ) Action SaveAction? | + ( send token StringLiteral and send server_data StringLiteral and |send server_data StringLiteral and send token StringLiteral and ) Action SaveAction? | + ( send request_uri StringLiteral and send data StringLiteral and send server_data StringLiteral and |send request_uri StringLiteral and send server_data StringLiteral and send data StringLiteral and |send data StringLiteral and send request_uri StringLiteral and send server_data StringLiteral and |send data StringLiteral and send server_data StringLiteral and send request_uri StringLiteral and |send server_data StringLiteral and send request_uri StringLiteral and send data StringLiteral and |send server_data StringLiteral and send data StringLiteral and send request_uri StringLiteral and ) Action SaveAction? | + ( send request_uri StringLiteral and send server_data StringLiteral and |send server_data StringLiteral and send request_uri StringLiteral and ) Action SaveAction? +} +PcOAuthStatement { + Action (with | where)( request is? StringLiteral"," server_data is? StringLiteral| server_data is? StringLiteral"," request is? StringLiteral) | + Action (with | where)( request is? StringLiteral"," server_data is? StringLiteral| server_data is? StringLiteral"," request is? StringLiteral) | + Action (with | where)( request is? StringLiteral"," server_data is? StringLiteral| server_data is? StringLiteral"," request is? StringLiteral) | + Action (with | where)( request is? StringLiteral"," client is? StringLiteral"," server_data is? StringLiteral"," expires_in is? StringLiteral| request is? StringLiteral"," client is? StringLiteral"," expires_in is? StringLiteral"," server_data is? StringLiteral| request is? StringLiteral"," server_data is? StringLiteral"," client is? StringLiteral"," expires_in is? StringLiteral| request is? StringLiteral"," server_data is? StringLiteral"," expires_in is? StringLiteral"," client is? StringLiteral| request is? StringLiteral"," expires_in is? StringLiteral"," client is? StringLiteral"," server_data is? StringLiteral| request is? StringLiteral"," expires_in is? StringLiteral"," server_data is? StringLiteral"," client is? StringLiteral| client is? StringLiteral"," request is? StringLiteral"," server_data is? StringLiteral"," expires_in is? StringLiteral| client is? StringLiteral"," request is? StringLiteral"," expires_in is? StringLiteral"," server_data is? StringLiteral| client is? StringLiteral"," server_data is? StringLiteral"," request is? StringLiteral"," expires_in is? StringLiteral| client is? StringLiteral"," server_data is? StringLiteral"," expires_in is? StringLiteral"," request is? StringLiteral| client is? StringLiteral"," expires_in is? StringLiteral"," request is? StringLiteral"," server_data is? StringLiteral| client is? StringLiteral"," expires_in is? StringLiteral"," server_data is? StringLiteral"," request is? StringLiteral| server_data is? StringLiteral"," request is? StringLiteral"," client is? StringLiteral"," expires_in is? StringLiteral| server_data is? StringLiteral"," request is? StringLiteral"," expires_in is? StringLiteral"," client is? StringLiteral| server_data is? StringLiteral"," client is? StringLiteral"," request is? StringLiteral"," expires_in is? StringLiteral| server_data is? StringLiteral"," client is? StringLiteral"," expires_in is? StringLiteral"," request is? StringLiteral| server_data is? StringLiteral"," expires_in is? StringLiteral"," request is? StringLiteral"," client is? StringLiteral| server_data is? StringLiteral"," expires_in is? StringLiteral"," client is? StringLiteral"," request is? StringLiteral| expires_in is? StringLiteral"," request is? StringLiteral"," client is? StringLiteral"," server_data is? StringLiteral| expires_in is? StringLiteral"," request is? StringLiteral"," server_data is? StringLiteral"," client is? StringLiteral| expires_in is? StringLiteral"," client is? StringLiteral"," request is? StringLiteral"," server_data is? StringLiteral| expires_in is? StringLiteral"," client is? StringLiteral"," server_data is? StringLiteral"," request is? StringLiteral| expires_in is? StringLiteral"," server_data is? StringLiteral"," request is? StringLiteral"," client is? StringLiteral| expires_in is? StringLiteral"," server_data is? StringLiteral"," client is? StringLiteral"," request is? StringLiteral) | + Action (with | where)( token is? StringLiteral"," server_data is? StringLiteral| server_data is? StringLiteral"," token is? StringLiteral) | + Action (with | where)( request_uri is? StringLiteral"," data is? StringLiteral"," server_data is? StringLiteral| request_uri is? StringLiteral"," server_data is? StringLiteral"," data is? StringLiteral| data is? StringLiteral"," request_uri is? StringLiteral"," server_data is? StringLiteral| data is? StringLiteral"," server_data is? StringLiteral"," request_uri is? StringLiteral| server_data is? StringLiteral"," request_uri is? StringLiteral"," data is? StringLiteral| server_data is? StringLiteral"," data is? StringLiteral"," request_uri is? StringLiteral) | + Action (with | where)( request_uri is? StringLiteral"," server_data is? StringLiteral| server_data is? StringLiteral"," request_uri is? StringLiteral) +} +GtPocketbaseStatement { + connect to StringLiteral and Action SaveAction? | + connect to StringLiteral and Action SaveAction? | + send my_credentials StringLiteral and Action SaveAction? | + Action SaveAction? | + send email StringLiteral and Action SaveAction? | + send list_parameters StringLiteral and Action SaveAction? | + send show_parameters StringLiteral and Action SaveAction? | + ( send create_parameters StringLiteral and send record_parameters StringLiteral and |send record_parameters StringLiteral and send create_parameters StringLiteral and ) Action SaveAction? | + ( send update_parameters StringLiteral and send record_parameters StringLiteral and |send record_parameters StringLiteral and send update_parameters StringLiteral and ) Action SaveAction? | + send delete_parameters StringLiteral and Action SaveAction? | + ( send url StringLiteral and send send_parameters StringLiteral and |send send_parameters StringLiteral and send url StringLiteral and ) Action SaveAction? +} +PcPocketbaseStatement { + connect to StringLiteral and Action | + connect to StringLiteral and Action | + Action (with | where) my_credentials is? StringLiteral | + Action | + Action (with | where) email is? StringLiteral | + Action (with | where) list_parameters is? StringLiteral | + Action (with | where) show_parameters is? StringLiteral | + Action (with | where)( create_parameters is? StringLiteral"," record_parameters is? StringLiteral| record_parameters is? StringLiteral"," create_parameters is? StringLiteral) | + Action (with | where)( update_parameters is? StringLiteral"," record_parameters is? StringLiteral| record_parameters is? StringLiteral"," update_parameters is? StringLiteral) | + Action (with | where) delete_parameters is? StringLiteral | + Action (with | where)( url is? StringLiteral"," send_parameters is? StringLiteral| send_parameters is? StringLiteral"," url is? StringLiteral) +} +GtQrCodeStatement { + send text StringLiteral and Action SaveAction? +} +PcQrCodeStatement { + Action (with | where) text is? StringLiteral +} +GtRdfStatement { + send dictionary StringLiteral and Action SaveAction? +} +PcRdfStatement { + Action (with | where) dictionary is? StringLiteral +} +GtRedisStatement { + connect to StringLiteral and ( send key StringLiteral and send object StringLiteral and |send object StringLiteral and send key StringLiteral and ) Action SaveAction? | + connect to StringLiteral and send key StringLiteral and Action SaveAction? | + connect to StringLiteral and send key StringLiteral and Action SaveAction? +} +PcRedisStatement { + connect to StringLiteral and Action (with | where)( key is? StringLiteral"," object is? StringLiteral| object is? StringLiteral"," key is? StringLiteral) | + connect to StringLiteral and Action (with | where) key is? StringLiteral | + connect to StringLiteral and Action (with | where) key is? StringLiteral +} +GtShellStatement { + send command StringLiteral and Action SaveAction? +} +PcShellStatement { + Action (with | where) command is? StringLiteral +} +GtTimestampStatement { + Action SaveAction? | + Action SaveAction? +} +PcTimestampStatement { + Action | + Action +} +GtWalletStatement { + ( send jwk StringLiteral and send object StringLiteral and send holder StringLiteral and send fields StringLiteral and |send jwk StringLiteral and send object StringLiteral and send fields StringLiteral and send holder StringLiteral and |send jwk StringLiteral and send holder StringLiteral and send object StringLiteral and send fields StringLiteral and |send jwk StringLiteral and send holder StringLiteral and send fields StringLiteral and send object StringLiteral and |send jwk StringLiteral and send fields StringLiteral and send object StringLiteral and send holder StringLiteral and |send jwk StringLiteral and send fields StringLiteral and send holder StringLiteral and send object StringLiteral and |send object StringLiteral and send jwk StringLiteral and send holder StringLiteral and send fields StringLiteral and |send object StringLiteral and send jwk StringLiteral and send fields StringLiteral and send holder StringLiteral and |send object StringLiteral and send holder StringLiteral and send jwk StringLiteral and send fields StringLiteral and |send object StringLiteral and send holder StringLiteral and send fields StringLiteral and send jwk StringLiteral and |send object StringLiteral and send fields StringLiteral and send jwk StringLiteral and send holder StringLiteral and |send object StringLiteral and send fields StringLiteral and send holder StringLiteral and send jwk StringLiteral and |send holder StringLiteral and send jwk StringLiteral and send object StringLiteral and send fields StringLiteral and |send holder StringLiteral and send jwk StringLiteral and send fields StringLiteral and send object StringLiteral and |send holder StringLiteral and send object StringLiteral and send jwk StringLiteral and send fields StringLiteral and |send holder StringLiteral and send object StringLiteral and send fields StringLiteral and send jwk StringLiteral and |send holder StringLiteral and send fields StringLiteral and send jwk StringLiteral and send object StringLiteral and |send holder StringLiteral and send fields StringLiteral and send object StringLiteral and send jwk StringLiteral and |send fields StringLiteral and send jwk StringLiteral and send object StringLiteral and send holder StringLiteral and |send fields StringLiteral and send jwk StringLiteral and send holder StringLiteral and send object StringLiteral and |send fields StringLiteral and send object StringLiteral and send jwk StringLiteral and send holder StringLiteral and |send fields StringLiteral and send object StringLiteral and send holder StringLiteral and send jwk StringLiteral and |send fields StringLiteral and send holder StringLiteral and send jwk StringLiteral and send object StringLiteral and |send fields StringLiteral and send holder StringLiteral and send object StringLiteral and send jwk StringLiteral and ) Action SaveAction? | + ( send verifier_url StringLiteral and send issued_vc StringLiteral and send disclosed StringLiteral and send nonce StringLiteral and send holder StringLiteral and |send verifier_url StringLiteral and send issued_vc StringLiteral and send disclosed StringLiteral and send holder StringLiteral and send nonce StringLiteral and |send verifier_url StringLiteral and send issued_vc StringLiteral and send nonce StringLiteral and send disclosed StringLiteral and send holder StringLiteral and |send verifier_url StringLiteral and send issued_vc StringLiteral and send nonce StringLiteral and send holder StringLiteral and send disclosed StringLiteral and |send verifier_url StringLiteral and send issued_vc StringLiteral and send holder StringLiteral and send disclosed StringLiteral and send nonce StringLiteral and |send verifier_url StringLiteral and send issued_vc StringLiteral and send holder StringLiteral and send nonce StringLiteral and send disclosed StringLiteral and |send verifier_url StringLiteral and send disclosed StringLiteral and send issued_vc StringLiteral and send nonce StringLiteral and send holder StringLiteral and |send verifier_url StringLiteral and send disclosed StringLiteral and send issued_vc StringLiteral and send holder StringLiteral and send nonce StringLiteral and |send verifier_url StringLiteral and send disclosed StringLiteral and send nonce StringLiteral and send issued_vc StringLiteral and send holder StringLiteral and |send verifier_url StringLiteral and send disclosed StringLiteral and send nonce StringLiteral and send holder StringLiteral and send issued_vc StringLiteral and |send verifier_url StringLiteral and send disclosed StringLiteral and send holder StringLiteral and send issued_vc StringLiteral and send nonce StringLiteral and |send verifier_url StringLiteral and send disclosed StringLiteral and send holder StringLiteral and send nonce StringLiteral and send issued_vc StringLiteral and |send verifier_url StringLiteral and send nonce StringLiteral and send issued_vc StringLiteral and send disclosed StringLiteral and send holder StringLiteral and |send verifier_url StringLiteral and send nonce StringLiteral and send issued_vc StringLiteral and send holder StringLiteral and send disclosed StringLiteral and |send verifier_url StringLiteral and send nonce StringLiteral and send disclosed StringLiteral and send issued_vc StringLiteral and send holder StringLiteral and |send verifier_url StringLiteral and send nonce StringLiteral and send disclosed StringLiteral and send holder StringLiteral and send issued_vc StringLiteral and |send verifier_url StringLiteral and send nonce StringLiteral and send holder StringLiteral and send issued_vc StringLiteral and send disclosed StringLiteral and |send verifier_url StringLiteral and send nonce StringLiteral and send holder StringLiteral and send disclosed StringLiteral and send issued_vc StringLiteral and |send verifier_url StringLiteral and send holder StringLiteral and send issued_vc StringLiteral and send disclosed StringLiteral and send nonce StringLiteral and |send verifier_url StringLiteral and send holder StringLiteral and send issued_vc StringLiteral and send nonce StringLiteral and send disclosed StringLiteral and |send verifier_url StringLiteral and send holder StringLiteral and send disclosed StringLiteral and send issued_vc StringLiteral and send nonce StringLiteral and |send verifier_url StringLiteral and send holder StringLiteral and send disclosed StringLiteral and send nonce StringLiteral and send issued_vc StringLiteral and |send verifier_url StringLiteral and send holder StringLiteral and send nonce StringLiteral and send issued_vc StringLiteral and send disclosed StringLiteral and |send verifier_url StringLiteral and send holder StringLiteral and send nonce StringLiteral and send disclosed StringLiteral and send issued_vc StringLiteral and |send issued_vc StringLiteral and send verifier_url StringLiteral and send disclosed StringLiteral and send nonce StringLiteral and send holder StringLiteral and |send issued_vc StringLiteral and send verifier_url StringLiteral and send disclosed StringLiteral and send holder StringLiteral and send nonce StringLiteral and |send issued_vc StringLiteral and send verifier_url StringLiteral and send nonce StringLiteral and send disclosed StringLiteral and send holder StringLiteral and |send issued_vc StringLiteral and send verifier_url StringLiteral and send nonce StringLiteral and send holder StringLiteral and send disclosed StringLiteral and |send issued_vc StringLiteral and send verifier_url StringLiteral and send holder StringLiteral and send disclosed StringLiteral and send nonce StringLiteral and |send issued_vc StringLiteral and send verifier_url StringLiteral and send holder StringLiteral and send nonce StringLiteral and send disclosed StringLiteral and |send issued_vc StringLiteral and send disclosed StringLiteral and send verifier_url StringLiteral and send nonce StringLiteral and send holder StringLiteral and |send issued_vc StringLiteral and send disclosed StringLiteral and send verifier_url StringLiteral and send holder StringLiteral and send nonce StringLiteral and |send issued_vc StringLiteral and send disclosed StringLiteral and send nonce StringLiteral and send verifier_url StringLiteral and send holder StringLiteral and |send issued_vc StringLiteral and send disclosed StringLiteral and send nonce StringLiteral and send holder StringLiteral and send verifier_url StringLiteral and |send issued_vc StringLiteral and send disclosed StringLiteral and send holder StringLiteral and send verifier_url StringLiteral and send nonce StringLiteral and |send issued_vc StringLiteral and send disclosed StringLiteral and send holder StringLiteral and send nonce StringLiteral and send verifier_url StringLiteral and |send issued_vc StringLiteral and send nonce StringLiteral and send verifier_url StringLiteral and send disclosed StringLiteral and send holder StringLiteral and |send issued_vc StringLiteral and send nonce StringLiteral and send verifier_url StringLiteral and send holder StringLiteral and send disclosed StringLiteral and |send issued_vc StringLiteral and send nonce StringLiteral and send disclosed StringLiteral and send verifier_url StringLiteral and send holder StringLiteral and |send issued_vc StringLiteral and send nonce StringLiteral and send disclosed StringLiteral and send holder StringLiteral and send verifier_url StringLiteral and |send issued_vc StringLiteral and send nonce StringLiteral and send holder StringLiteral and send verifier_url StringLiteral and send disclosed StringLiteral and |send issued_vc StringLiteral and send nonce StringLiteral and send holder StringLiteral and send disclosed StringLiteral and send verifier_url StringLiteral and |send issued_vc StringLiteral and send holder StringLiteral and send verifier_url StringLiteral and send disclosed StringLiteral and send nonce StringLiteral and |send issued_vc StringLiteral and send holder StringLiteral and send verifier_url StringLiteral and send nonce StringLiteral and send disclosed StringLiteral and |send issued_vc StringLiteral and send holder StringLiteral and send disclosed StringLiteral and send verifier_url StringLiteral and send nonce StringLiteral and |send issued_vc StringLiteral and send holder StringLiteral and send disclosed StringLiteral and send nonce StringLiteral and send verifier_url StringLiteral and |send issued_vc StringLiteral and send holder StringLiteral and send nonce StringLiteral and send verifier_url StringLiteral and send disclosed StringLiteral and |send issued_vc StringLiteral and send holder StringLiteral and send nonce StringLiteral and send disclosed StringLiteral and send verifier_url StringLiteral and |send disclosed StringLiteral and send verifier_url StringLiteral and send issued_vc StringLiteral and send nonce StringLiteral and send holder StringLiteral and |send disclosed StringLiteral and send verifier_url StringLiteral and send issued_vc StringLiteral and send holder StringLiteral and send nonce StringLiteral and |send disclosed StringLiteral and send verifier_url StringLiteral and send nonce StringLiteral and send issued_vc StringLiteral and send holder StringLiteral and |send disclosed StringLiteral and send verifier_url StringLiteral and send nonce StringLiteral and send holder StringLiteral and send issued_vc StringLiteral and |send disclosed StringLiteral and send verifier_url StringLiteral and send holder StringLiteral and send issued_vc StringLiteral and send nonce StringLiteral and |send disclosed StringLiteral and send verifier_url StringLiteral and send holder StringLiteral and send nonce StringLiteral and send issued_vc StringLiteral and |send disclosed StringLiteral and send issued_vc StringLiteral and send verifier_url StringLiteral and send nonce StringLiteral and send holder StringLiteral and |send disclosed StringLiteral and send issued_vc StringLiteral and send verifier_url StringLiteral and send holder StringLiteral and send nonce StringLiteral and |send disclosed StringLiteral and send issued_vc StringLiteral and send nonce StringLiteral and send verifier_url StringLiteral and send holder StringLiteral and |send disclosed StringLiteral and send issued_vc StringLiteral and send nonce StringLiteral and send holder StringLiteral and send verifier_url StringLiteral and |send disclosed StringLiteral and send issued_vc StringLiteral and send holder StringLiteral and send verifier_url StringLiteral and send nonce StringLiteral and |send disclosed StringLiteral and send issued_vc StringLiteral and send holder StringLiteral and send nonce StringLiteral and send verifier_url StringLiteral and |send disclosed StringLiteral and send nonce StringLiteral and send verifier_url StringLiteral and send issued_vc StringLiteral and send holder StringLiteral and |send disclosed StringLiteral and send nonce StringLiteral and send verifier_url StringLiteral and send holder StringLiteral and send issued_vc StringLiteral and |send disclosed StringLiteral and send nonce StringLiteral and send issued_vc StringLiteral and send verifier_url StringLiteral and send holder StringLiteral and |send disclosed StringLiteral and send nonce StringLiteral and send issued_vc StringLiteral and send holder StringLiteral and send verifier_url StringLiteral and |send disclosed StringLiteral and send nonce StringLiteral and send holder StringLiteral and send verifier_url StringLiteral and send issued_vc StringLiteral and |send disclosed StringLiteral and send nonce StringLiteral and send holder StringLiteral and send issued_vc StringLiteral and send verifier_url StringLiteral and |send disclosed StringLiteral and send holder StringLiteral and send verifier_url StringLiteral and send issued_vc StringLiteral and send nonce StringLiteral and |send disclosed StringLiteral and send holder StringLiteral and send verifier_url StringLiteral and send nonce StringLiteral and send issued_vc StringLiteral and |send disclosed StringLiteral and send holder StringLiteral and send issued_vc StringLiteral and send verifier_url StringLiteral and send nonce StringLiteral and |send disclosed StringLiteral and send holder StringLiteral and send issued_vc StringLiteral and send nonce StringLiteral and send verifier_url StringLiteral and |send disclosed StringLiteral and send holder StringLiteral and send nonce StringLiteral and send verifier_url StringLiteral and send issued_vc StringLiteral and |send disclosed StringLiteral and send holder StringLiteral and send nonce StringLiteral and send issued_vc StringLiteral and send verifier_url StringLiteral and |send nonce StringLiteral and send verifier_url StringLiteral and send issued_vc StringLiteral and send disclosed StringLiteral and send holder StringLiteral and |send nonce StringLiteral and send verifier_url StringLiteral and send issued_vc StringLiteral and send holder StringLiteral and send disclosed StringLiteral and |send nonce StringLiteral and send verifier_url StringLiteral and send disclosed StringLiteral and send issued_vc StringLiteral and send holder StringLiteral and |send nonce StringLiteral and send verifier_url StringLiteral and send disclosed StringLiteral and send holder StringLiteral and send issued_vc StringLiteral and |send nonce StringLiteral and send verifier_url StringLiteral and send holder StringLiteral and send issued_vc StringLiteral and send disclosed StringLiteral and |send nonce StringLiteral and send verifier_url StringLiteral and send holder StringLiteral and send disclosed StringLiteral and send issued_vc StringLiteral and |send nonce StringLiteral and send issued_vc StringLiteral and send verifier_url StringLiteral and send disclosed StringLiteral and send holder StringLiteral and |send nonce StringLiteral and send issued_vc StringLiteral and send verifier_url StringLiteral and send holder StringLiteral and send disclosed StringLiteral and |send nonce StringLiteral and send issued_vc StringLiteral and send disclosed StringLiteral and send verifier_url StringLiteral and send holder StringLiteral and |send nonce StringLiteral and send issued_vc StringLiteral and send disclosed StringLiteral and send holder StringLiteral and send verifier_url StringLiteral and |send nonce StringLiteral and send issued_vc StringLiteral and send holder StringLiteral and send verifier_url StringLiteral and send disclosed StringLiteral and |send nonce StringLiteral and send issued_vc StringLiteral and send holder StringLiteral and send disclosed StringLiteral and send verifier_url StringLiteral and |send nonce StringLiteral and send disclosed StringLiteral and send verifier_url StringLiteral and send issued_vc StringLiteral and send holder StringLiteral and |send nonce StringLiteral and send disclosed StringLiteral and send verifier_url StringLiteral and send holder StringLiteral and send issued_vc StringLiteral and |send nonce StringLiteral and send disclosed StringLiteral and send issued_vc StringLiteral and send verifier_url StringLiteral and send holder StringLiteral and |send nonce StringLiteral and send disclosed StringLiteral and send issued_vc StringLiteral and send holder StringLiteral and send verifier_url StringLiteral and |send nonce StringLiteral and send disclosed StringLiteral and send holder StringLiteral and send verifier_url StringLiteral and send issued_vc StringLiteral and |send nonce StringLiteral and send disclosed StringLiteral and send holder StringLiteral and send issued_vc StringLiteral and send verifier_url StringLiteral and |send nonce StringLiteral and send holder StringLiteral and send verifier_url StringLiteral and send issued_vc StringLiteral and send disclosed StringLiteral and |send nonce StringLiteral and send holder StringLiteral and send verifier_url StringLiteral and send disclosed StringLiteral and send issued_vc StringLiteral and |send nonce StringLiteral and send holder StringLiteral and send issued_vc StringLiteral and send verifier_url StringLiteral and send disclosed StringLiteral and |send nonce StringLiteral and send holder StringLiteral and send issued_vc StringLiteral and send disclosed StringLiteral and send verifier_url StringLiteral and |send nonce StringLiteral and send holder StringLiteral and send disclosed StringLiteral and send verifier_url StringLiteral and send issued_vc StringLiteral and |send nonce StringLiteral and send holder StringLiteral and send disclosed StringLiteral and send issued_vc StringLiteral and send verifier_url StringLiteral and |send holder StringLiteral and send verifier_url StringLiteral and send issued_vc StringLiteral and send disclosed StringLiteral and send nonce StringLiteral and |send holder StringLiteral and send verifier_url StringLiteral and send issued_vc StringLiteral and send nonce StringLiteral and send disclosed StringLiteral and |send holder StringLiteral and send verifier_url StringLiteral and send disclosed StringLiteral and send issued_vc StringLiteral and send nonce StringLiteral and |send holder StringLiteral and send verifier_url StringLiteral and send disclosed StringLiteral and send nonce StringLiteral and send issued_vc StringLiteral and |send holder StringLiteral and send verifier_url StringLiteral and send nonce StringLiteral and send issued_vc StringLiteral and send disclosed StringLiteral and |send holder StringLiteral and send verifier_url StringLiteral and send nonce StringLiteral and send disclosed StringLiteral and send issued_vc StringLiteral and |send holder StringLiteral and send issued_vc StringLiteral and send verifier_url StringLiteral and send disclosed StringLiteral and send nonce StringLiteral and |send holder StringLiteral and send issued_vc StringLiteral and send verifier_url StringLiteral and send nonce StringLiteral and send disclosed StringLiteral and |send holder StringLiteral and send issued_vc StringLiteral and send disclosed StringLiteral and send verifier_url StringLiteral and send nonce StringLiteral and |send holder StringLiteral and send issued_vc StringLiteral and send disclosed StringLiteral and send nonce StringLiteral and send verifier_url StringLiteral and |send holder StringLiteral and send issued_vc StringLiteral and send nonce StringLiteral and send verifier_url StringLiteral and send disclosed StringLiteral and |send holder StringLiteral and send issued_vc StringLiteral and send nonce StringLiteral and send disclosed StringLiteral and send verifier_url StringLiteral and |send holder StringLiteral and send disclosed StringLiteral and send verifier_url StringLiteral and send issued_vc StringLiteral and send nonce StringLiteral and |send holder StringLiteral and send disclosed StringLiteral and send verifier_url StringLiteral and send nonce StringLiteral and send issued_vc StringLiteral and |send holder StringLiteral and send disclosed StringLiteral and send issued_vc StringLiteral and send verifier_url StringLiteral and send nonce StringLiteral and |send holder StringLiteral and send disclosed StringLiteral and send issued_vc StringLiteral and send nonce StringLiteral and send verifier_url StringLiteral and |send holder StringLiteral and send disclosed StringLiteral and send nonce StringLiteral and send verifier_url StringLiteral and send issued_vc StringLiteral and |send holder StringLiteral and send disclosed StringLiteral and send nonce StringLiteral and send issued_vc StringLiteral and send verifier_url StringLiteral and |send holder StringLiteral and send nonce StringLiteral and send verifier_url StringLiteral and send issued_vc StringLiteral and send disclosed StringLiteral and |send holder StringLiteral and send nonce StringLiteral and send verifier_url StringLiteral and send disclosed StringLiteral and send issued_vc StringLiteral and |send holder StringLiteral and send nonce StringLiteral and send issued_vc StringLiteral and send verifier_url StringLiteral and send disclosed StringLiteral and |send holder StringLiteral and send nonce StringLiteral and send issued_vc StringLiteral and send disclosed StringLiteral and send verifier_url StringLiteral and |send holder StringLiteral and send nonce StringLiteral and send disclosed StringLiteral and send verifier_url StringLiteral and send issued_vc StringLiteral and |send holder StringLiteral and send nonce StringLiteral and send disclosed StringLiteral and send issued_vc StringLiteral and send verifier_url StringLiteral and ) Action SaveAction? | + ( send verifier_url StringLiteral and send issued_vc StringLiteral and send nonce StringLiteral and send issuer StringLiteral and |send verifier_url StringLiteral and send issued_vc StringLiteral and send issuer StringLiteral and send nonce StringLiteral and |send verifier_url StringLiteral and send nonce StringLiteral and send issued_vc StringLiteral and send issuer StringLiteral and |send verifier_url StringLiteral and send nonce StringLiteral and send issuer StringLiteral and send issued_vc StringLiteral and |send verifier_url StringLiteral and send issuer StringLiteral and send issued_vc StringLiteral and send nonce StringLiteral and |send verifier_url StringLiteral and send issuer StringLiteral and send nonce StringLiteral and send issued_vc StringLiteral and |send issued_vc StringLiteral and send verifier_url StringLiteral and send nonce StringLiteral and send issuer StringLiteral and |send issued_vc StringLiteral and send verifier_url StringLiteral and send issuer StringLiteral and send nonce StringLiteral and |send issued_vc StringLiteral and send nonce StringLiteral and send verifier_url StringLiteral and send issuer StringLiteral and |send issued_vc StringLiteral and send nonce StringLiteral and send issuer StringLiteral and send verifier_url StringLiteral and |send issued_vc StringLiteral and send issuer StringLiteral and send verifier_url StringLiteral and send nonce StringLiteral and |send issued_vc StringLiteral and send issuer StringLiteral and send nonce StringLiteral and send verifier_url StringLiteral and |send nonce StringLiteral and send verifier_url StringLiteral and send issued_vc StringLiteral and send issuer StringLiteral and |send nonce StringLiteral and send verifier_url StringLiteral and send issuer StringLiteral and send issued_vc StringLiteral and |send nonce StringLiteral and send issued_vc StringLiteral and send verifier_url StringLiteral and send issuer StringLiteral and |send nonce StringLiteral and send issued_vc StringLiteral and send issuer StringLiteral and send verifier_url StringLiteral and |send nonce StringLiteral and send issuer StringLiteral and send verifier_url StringLiteral and send issued_vc StringLiteral and |send nonce StringLiteral and send issuer StringLiteral and send issued_vc StringLiteral and send verifier_url StringLiteral and |send issuer StringLiteral and send verifier_url StringLiteral and send issued_vc StringLiteral and send nonce StringLiteral and |send issuer StringLiteral and send verifier_url StringLiteral and send nonce StringLiteral and send issued_vc StringLiteral and |send issuer StringLiteral and send issued_vc StringLiteral and send verifier_url StringLiteral and send nonce StringLiteral and |send issuer StringLiteral and send issued_vc StringLiteral and send nonce StringLiteral and send verifier_url StringLiteral and |send issuer StringLiteral and send nonce StringLiteral and send verifier_url StringLiteral and send issued_vc StringLiteral and |send issuer StringLiteral and send nonce StringLiteral and send issued_vc StringLiteral and send verifier_url StringLiteral and ) Action SaveAction? | + Action SaveAction? | + send sk StringLiteral and Action SaveAction? | + send token StringLiteral and Action SaveAction? +} +PcWalletStatement { + Action (with | where)( jwk is? StringLiteral"," object is? StringLiteral"," holder is? StringLiteral"," fields is? StringLiteral| jwk is? StringLiteral"," object is? StringLiteral"," fields is? StringLiteral"," holder is? StringLiteral| jwk is? StringLiteral"," holder is? StringLiteral"," object is? StringLiteral"," fields is? StringLiteral| jwk is? StringLiteral"," holder is? StringLiteral"," fields is? StringLiteral"," object is? StringLiteral| jwk is? StringLiteral"," fields is? StringLiteral"," object is? StringLiteral"," holder is? StringLiteral| jwk is? StringLiteral"," fields is? StringLiteral"," holder is? StringLiteral"," object is? StringLiteral| object is? StringLiteral"," jwk is? StringLiteral"," holder is? StringLiteral"," fields is? StringLiteral| object is? StringLiteral"," jwk is? StringLiteral"," fields is? StringLiteral"," holder is? StringLiteral| object is? StringLiteral"," holder is? StringLiteral"," jwk is? StringLiteral"," fields is? StringLiteral| object is? StringLiteral"," holder is? StringLiteral"," fields is? StringLiteral"," jwk is? StringLiteral| object is? StringLiteral"," fields is? StringLiteral"," jwk is? StringLiteral"," holder is? StringLiteral| object is? StringLiteral"," fields is? StringLiteral"," holder is? StringLiteral"," jwk is? StringLiteral| holder is? StringLiteral"," jwk is? StringLiteral"," object is? StringLiteral"," fields is? StringLiteral| holder is? StringLiteral"," jwk is? StringLiteral"," fields is? StringLiteral"," object is? StringLiteral| holder is? StringLiteral"," object is? StringLiteral"," jwk is? StringLiteral"," fields is? StringLiteral| holder is? StringLiteral"," object is? StringLiteral"," fields is? StringLiteral"," jwk is? StringLiteral| holder is? StringLiteral"," fields is? StringLiteral"," jwk is? StringLiteral"," object is? StringLiteral| holder is? StringLiteral"," fields is? StringLiteral"," object is? StringLiteral"," jwk is? StringLiteral| fields is? StringLiteral"," jwk is? StringLiteral"," object is? StringLiteral"," holder is? StringLiteral| fields is? StringLiteral"," jwk is? StringLiteral"," holder is? StringLiteral"," object is? StringLiteral| fields is? StringLiteral"," object is? StringLiteral"," jwk is? StringLiteral"," holder is? StringLiteral| fields is? StringLiteral"," object is? StringLiteral"," holder is? StringLiteral"," jwk is? StringLiteral| fields is? StringLiteral"," holder is? StringLiteral"," jwk is? StringLiteral"," object is? StringLiteral| fields is? StringLiteral"," holder is? StringLiteral"," object is? StringLiteral"," jwk is? StringLiteral) | + Action (with | where)( verifier_url is? StringLiteral"," issued_vc is? StringLiteral"," disclosed is? StringLiteral"," nonce is? StringLiteral"," holder is? StringLiteral| verifier_url is? StringLiteral"," issued_vc is? StringLiteral"," disclosed is? StringLiteral"," holder is? StringLiteral"," nonce is? StringLiteral| verifier_url is? StringLiteral"," issued_vc is? StringLiteral"," nonce is? StringLiteral"," disclosed is? StringLiteral"," holder is? StringLiteral| verifier_url is? StringLiteral"," issued_vc is? StringLiteral"," nonce is? StringLiteral"," holder is? StringLiteral"," disclosed is? StringLiteral| verifier_url is? StringLiteral"," issued_vc is? StringLiteral"," holder is? StringLiteral"," disclosed is? StringLiteral"," nonce is? StringLiteral| verifier_url is? StringLiteral"," issued_vc is? StringLiteral"," holder is? StringLiteral"," nonce is? StringLiteral"," disclosed is? StringLiteral| verifier_url is? StringLiteral"," disclosed is? StringLiteral"," issued_vc is? StringLiteral"," nonce is? StringLiteral"," holder is? StringLiteral| verifier_url is? StringLiteral"," disclosed is? StringLiteral"," issued_vc is? StringLiteral"," holder is? StringLiteral"," nonce is? StringLiteral| verifier_url is? StringLiteral"," disclosed is? StringLiteral"," nonce is? StringLiteral"," issued_vc is? StringLiteral"," holder is? StringLiteral| verifier_url is? StringLiteral"," disclosed is? StringLiteral"," nonce is? StringLiteral"," holder is? StringLiteral"," issued_vc is? StringLiteral| verifier_url is? StringLiteral"," disclosed is? StringLiteral"," holder is? StringLiteral"," issued_vc is? StringLiteral"," nonce is? StringLiteral| verifier_url is? StringLiteral"," disclosed is? StringLiteral"," holder is? StringLiteral"," nonce is? StringLiteral"," issued_vc is? StringLiteral| verifier_url is? StringLiteral"," nonce is? StringLiteral"," issued_vc is? StringLiteral"," disclosed is? StringLiteral"," holder is? StringLiteral| verifier_url is? StringLiteral"," nonce is? StringLiteral"," issued_vc is? StringLiteral"," holder is? StringLiteral"," disclosed is? StringLiteral| verifier_url is? StringLiteral"," nonce is? StringLiteral"," disclosed is? StringLiteral"," issued_vc is? StringLiteral"," holder is? StringLiteral| verifier_url is? StringLiteral"," nonce is? StringLiteral"," disclosed is? StringLiteral"," holder is? StringLiteral"," issued_vc is? StringLiteral| verifier_url is? StringLiteral"," nonce is? StringLiteral"," holder is? StringLiteral"," issued_vc is? StringLiteral"," disclosed is? StringLiteral| verifier_url is? StringLiteral"," nonce is? StringLiteral"," holder is? StringLiteral"," disclosed is? StringLiteral"," issued_vc is? StringLiteral| verifier_url is? StringLiteral"," holder is? StringLiteral"," issued_vc is? StringLiteral"," disclosed is? StringLiteral"," nonce is? StringLiteral| verifier_url is? StringLiteral"," holder is? StringLiteral"," issued_vc is? StringLiteral"," nonce is? StringLiteral"," disclosed is? StringLiteral| verifier_url is? StringLiteral"," holder is? StringLiteral"," disclosed is? StringLiteral"," issued_vc is? StringLiteral"," nonce is? StringLiteral| verifier_url is? StringLiteral"," holder is? StringLiteral"," disclosed is? StringLiteral"," nonce is? StringLiteral"," issued_vc is? StringLiteral| verifier_url is? StringLiteral"," holder is? StringLiteral"," nonce is? StringLiteral"," issued_vc is? StringLiteral"," disclosed is? StringLiteral| verifier_url is? StringLiteral"," holder is? StringLiteral"," nonce is? StringLiteral"," disclosed is? StringLiteral"," issued_vc is? StringLiteral| issued_vc is? StringLiteral"," verifier_url is? StringLiteral"," disclosed is? StringLiteral"," nonce is? StringLiteral"," holder is? StringLiteral| issued_vc is? StringLiteral"," verifier_url is? StringLiteral"," disclosed is? StringLiteral"," holder is? StringLiteral"," nonce is? StringLiteral| issued_vc is? StringLiteral"," verifier_url is? StringLiteral"," nonce is? StringLiteral"," disclosed is? StringLiteral"," holder is? StringLiteral| issued_vc is? StringLiteral"," verifier_url is? StringLiteral"," nonce is? StringLiteral"," holder is? StringLiteral"," disclosed is? StringLiteral| issued_vc is? StringLiteral"," verifier_url is? StringLiteral"," holder is? StringLiteral"," disclosed is? StringLiteral"," nonce is? StringLiteral| issued_vc is? StringLiteral"," verifier_url is? StringLiteral"," holder is? StringLiteral"," nonce is? StringLiteral"," disclosed is? StringLiteral| issued_vc is? StringLiteral"," disclosed is? StringLiteral"," verifier_url is? StringLiteral"," nonce is? StringLiteral"," holder is? StringLiteral| issued_vc is? StringLiteral"," disclosed is? StringLiteral"," verifier_url is? StringLiteral"," holder is? StringLiteral"," nonce is? StringLiteral| issued_vc is? StringLiteral"," disclosed is? StringLiteral"," nonce is? StringLiteral"," verifier_url is? StringLiteral"," holder is? StringLiteral| issued_vc is? StringLiteral"," disclosed is? StringLiteral"," nonce is? StringLiteral"," holder is? StringLiteral"," verifier_url is? StringLiteral| issued_vc is? StringLiteral"," disclosed is? StringLiteral"," holder is? StringLiteral"," verifier_url is? StringLiteral"," nonce is? StringLiteral| issued_vc is? StringLiteral"," disclosed is? StringLiteral"," holder is? StringLiteral"," nonce is? StringLiteral"," verifier_url is? StringLiteral| issued_vc is? StringLiteral"," nonce is? StringLiteral"," verifier_url is? StringLiteral"," disclosed is? StringLiteral"," holder is? StringLiteral| issued_vc is? StringLiteral"," nonce is? StringLiteral"," verifier_url is? StringLiteral"," holder is? StringLiteral"," disclosed is? StringLiteral| issued_vc is? StringLiteral"," nonce is? StringLiteral"," disclosed is? StringLiteral"," verifier_url is? StringLiteral"," holder is? StringLiteral| issued_vc is? StringLiteral"," nonce is? StringLiteral"," disclosed is? StringLiteral"," holder is? StringLiteral"," verifier_url is? StringLiteral| issued_vc is? StringLiteral"," nonce is? StringLiteral"," holder is? StringLiteral"," verifier_url is? StringLiteral"," disclosed is? StringLiteral| issued_vc is? StringLiteral"," nonce is? StringLiteral"," holder is? StringLiteral"," disclosed is? StringLiteral"," verifier_url is? StringLiteral| issued_vc is? StringLiteral"," holder is? StringLiteral"," verifier_url is? StringLiteral"," disclosed is? StringLiteral"," nonce is? StringLiteral| issued_vc is? StringLiteral"," holder is? StringLiteral"," verifier_url is? StringLiteral"," nonce is? StringLiteral"," disclosed is? StringLiteral| issued_vc is? StringLiteral"," holder is? StringLiteral"," disclosed is? StringLiteral"," verifier_url is? StringLiteral"," nonce is? StringLiteral| issued_vc is? StringLiteral"," holder is? StringLiteral"," disclosed is? StringLiteral"," nonce is? StringLiteral"," verifier_url is? StringLiteral| issued_vc is? StringLiteral"," holder is? StringLiteral"," nonce is? StringLiteral"," verifier_url is? StringLiteral"," disclosed is? StringLiteral| issued_vc is? StringLiteral"," holder is? StringLiteral"," nonce is? StringLiteral"," disclosed is? StringLiteral"," verifier_url is? StringLiteral| disclosed is? StringLiteral"," verifier_url is? StringLiteral"," issued_vc is? StringLiteral"," nonce is? StringLiteral"," holder is? StringLiteral| disclosed is? StringLiteral"," verifier_url is? StringLiteral"," issued_vc is? StringLiteral"," holder is? StringLiteral"," nonce is? StringLiteral| disclosed is? StringLiteral"," verifier_url is? StringLiteral"," nonce is? StringLiteral"," issued_vc is? StringLiteral"," holder is? StringLiteral| disclosed is? StringLiteral"," verifier_url is? StringLiteral"," nonce is? StringLiteral"," holder is? StringLiteral"," issued_vc is? StringLiteral| disclosed is? StringLiteral"," verifier_url is? StringLiteral"," holder is? StringLiteral"," issued_vc is? StringLiteral"," nonce is? StringLiteral| disclosed is? StringLiteral"," verifier_url is? StringLiteral"," holder is? StringLiteral"," nonce is? StringLiteral"," issued_vc is? StringLiteral| disclosed is? StringLiteral"," issued_vc is? StringLiteral"," verifier_url is? StringLiteral"," nonce is? StringLiteral"," holder is? StringLiteral| disclosed is? StringLiteral"," issued_vc is? StringLiteral"," verifier_url is? StringLiteral"," holder is? StringLiteral"," nonce is? StringLiteral| disclosed is? StringLiteral"," issued_vc is? StringLiteral"," nonce is? StringLiteral"," verifier_url is? StringLiteral"," holder is? StringLiteral| disclosed is? StringLiteral"," issued_vc is? StringLiteral"," nonce is? StringLiteral"," holder is? StringLiteral"," verifier_url is? StringLiteral| disclosed is? StringLiteral"," issued_vc is? StringLiteral"," holder is? StringLiteral"," verifier_url is? StringLiteral"," nonce is? StringLiteral| disclosed is? StringLiteral"," issued_vc is? StringLiteral"," holder is? StringLiteral"," nonce is? StringLiteral"," verifier_url is? StringLiteral| disclosed is? StringLiteral"," nonce is? StringLiteral"," verifier_url is? StringLiteral"," issued_vc is? StringLiteral"," holder is? StringLiteral| disclosed is? StringLiteral"," nonce is? StringLiteral"," verifier_url is? StringLiteral"," holder is? StringLiteral"," issued_vc is? StringLiteral| disclosed is? StringLiteral"," nonce is? StringLiteral"," issued_vc is? StringLiteral"," verifier_url is? StringLiteral"," holder is? StringLiteral| disclosed is? StringLiteral"," nonce is? StringLiteral"," issued_vc is? StringLiteral"," holder is? StringLiteral"," verifier_url is? StringLiteral| disclosed is? StringLiteral"," nonce is? StringLiteral"," holder is? StringLiteral"," verifier_url is? StringLiteral"," issued_vc is? StringLiteral| disclosed is? StringLiteral"," nonce is? StringLiteral"," holder is? StringLiteral"," issued_vc is? StringLiteral"," verifier_url is? StringLiteral| disclosed is? StringLiteral"," holder is? StringLiteral"," verifier_url is? StringLiteral"," issued_vc is? StringLiteral"," nonce is? StringLiteral| disclosed is? StringLiteral"," holder is? StringLiteral"," verifier_url is? StringLiteral"," nonce is? StringLiteral"," issued_vc is? StringLiteral| disclosed is? StringLiteral"," holder is? StringLiteral"," issued_vc is? StringLiteral"," verifier_url is? StringLiteral"," nonce is? StringLiteral| disclosed is? StringLiteral"," holder is? StringLiteral"," issued_vc is? StringLiteral"," nonce is? StringLiteral"," verifier_url is? StringLiteral| disclosed is? StringLiteral"," holder is? StringLiteral"," nonce is? StringLiteral"," verifier_url is? StringLiteral"," issued_vc is? StringLiteral| disclosed is? StringLiteral"," holder is? StringLiteral"," nonce is? StringLiteral"," issued_vc is? StringLiteral"," verifier_url is? StringLiteral| nonce is? StringLiteral"," verifier_url is? StringLiteral"," issued_vc is? StringLiteral"," disclosed is? StringLiteral"," holder is? StringLiteral| nonce is? StringLiteral"," verifier_url is? StringLiteral"," issued_vc is? StringLiteral"," holder is? StringLiteral"," disclosed is? StringLiteral| nonce is? StringLiteral"," verifier_url is? StringLiteral"," disclosed is? StringLiteral"," issued_vc is? StringLiteral"," holder is? StringLiteral| nonce is? StringLiteral"," verifier_url is? StringLiteral"," disclosed is? StringLiteral"," holder is? StringLiteral"," issued_vc is? StringLiteral| nonce is? StringLiteral"," verifier_url is? StringLiteral"," holder is? StringLiteral"," issued_vc is? StringLiteral"," disclosed is? StringLiteral| nonce is? StringLiteral"," verifier_url is? StringLiteral"," holder is? StringLiteral"," disclosed is? StringLiteral"," issued_vc is? StringLiteral| nonce is? StringLiteral"," issued_vc is? StringLiteral"," verifier_url is? StringLiteral"," disclosed is? StringLiteral"," holder is? StringLiteral| nonce is? StringLiteral"," issued_vc is? StringLiteral"," verifier_url is? StringLiteral"," holder is? StringLiteral"," disclosed is? StringLiteral| nonce is? StringLiteral"," issued_vc is? StringLiteral"," disclosed is? StringLiteral"," verifier_url is? StringLiteral"," holder is? StringLiteral| nonce is? StringLiteral"," issued_vc is? StringLiteral"," disclosed is? StringLiteral"," holder is? StringLiteral"," verifier_url is? StringLiteral| nonce is? StringLiteral"," issued_vc is? StringLiteral"," holder is? StringLiteral"," verifier_url is? StringLiteral"," disclosed is? StringLiteral| nonce is? StringLiteral"," issued_vc is? StringLiteral"," holder is? StringLiteral"," disclosed is? StringLiteral"," verifier_url is? StringLiteral| nonce is? StringLiteral"," disclosed is? StringLiteral"," verifier_url is? StringLiteral"," issued_vc is? StringLiteral"," holder is? StringLiteral| nonce is? StringLiteral"," disclosed is? StringLiteral"," verifier_url is? StringLiteral"," holder is? StringLiteral"," issued_vc is? StringLiteral| nonce is? StringLiteral"," disclosed is? StringLiteral"," issued_vc is? StringLiteral"," verifier_url is? StringLiteral"," holder is? StringLiteral| nonce is? StringLiteral"," disclosed is? StringLiteral"," issued_vc is? StringLiteral"," holder is? StringLiteral"," verifier_url is? StringLiteral| nonce is? StringLiteral"," disclosed is? StringLiteral"," holder is? StringLiteral"," verifier_url is? StringLiteral"," issued_vc is? StringLiteral| nonce is? StringLiteral"," disclosed is? StringLiteral"," holder is? StringLiteral"," issued_vc is? StringLiteral"," verifier_url is? StringLiteral| nonce is? StringLiteral"," holder is? StringLiteral"," verifier_url is? StringLiteral"," issued_vc is? StringLiteral"," disclosed is? StringLiteral| nonce is? StringLiteral"," holder is? StringLiteral"," verifier_url is? StringLiteral"," disclosed is? StringLiteral"," issued_vc is? StringLiteral| nonce is? StringLiteral"," holder is? StringLiteral"," issued_vc is? StringLiteral"," verifier_url is? StringLiteral"," disclosed is? StringLiteral| nonce is? StringLiteral"," holder is? StringLiteral"," issued_vc is? StringLiteral"," disclosed is? StringLiteral"," verifier_url is? StringLiteral| nonce is? StringLiteral"," holder is? StringLiteral"," disclosed is? StringLiteral"," verifier_url is? StringLiteral"," issued_vc is? StringLiteral| nonce is? StringLiteral"," holder is? StringLiteral"," disclosed is? StringLiteral"," issued_vc is? StringLiteral"," verifier_url is? StringLiteral| holder is? StringLiteral"," verifier_url is? StringLiteral"," issued_vc is? StringLiteral"," disclosed is? StringLiteral"," nonce is? StringLiteral| holder is? StringLiteral"," verifier_url is? StringLiteral"," issued_vc is? StringLiteral"," nonce is? StringLiteral"," disclosed is? StringLiteral| holder is? StringLiteral"," verifier_url is? StringLiteral"," disclosed is? StringLiteral"," issued_vc is? StringLiteral"," nonce is? StringLiteral| holder is? StringLiteral"," verifier_url is? StringLiteral"," disclosed is? StringLiteral"," nonce is? StringLiteral"," issued_vc is? StringLiteral| holder is? StringLiteral"," verifier_url is? StringLiteral"," nonce is? StringLiteral"," issued_vc is? StringLiteral"," disclosed is? StringLiteral| holder is? StringLiteral"," verifier_url is? StringLiteral"," nonce is? StringLiteral"," disclosed is? StringLiteral"," issued_vc is? StringLiteral| holder is? StringLiteral"," issued_vc is? StringLiteral"," verifier_url is? StringLiteral"," disclosed is? StringLiteral"," nonce is? StringLiteral| holder is? StringLiteral"," issued_vc is? StringLiteral"," verifier_url is? StringLiteral"," nonce is? StringLiteral"," disclosed is? StringLiteral| holder is? StringLiteral"," issued_vc is? StringLiteral"," disclosed is? StringLiteral"," verifier_url is? StringLiteral"," nonce is? StringLiteral| holder is? StringLiteral"," issued_vc is? StringLiteral"," disclosed is? StringLiteral"," nonce is? StringLiteral"," verifier_url is? StringLiteral| holder is? StringLiteral"," issued_vc is? StringLiteral"," nonce is? StringLiteral"," verifier_url is? StringLiteral"," disclosed is? StringLiteral| holder is? StringLiteral"," issued_vc is? StringLiteral"," nonce is? StringLiteral"," disclosed is? StringLiteral"," verifier_url is? StringLiteral| holder is? StringLiteral"," disclosed is? StringLiteral"," verifier_url is? StringLiteral"," issued_vc is? StringLiteral"," nonce is? StringLiteral| holder is? StringLiteral"," disclosed is? StringLiteral"," verifier_url is? StringLiteral"," nonce is? StringLiteral"," issued_vc is? StringLiteral| holder is? StringLiteral"," disclosed is? StringLiteral"," issued_vc is? StringLiteral"," verifier_url is? StringLiteral"," nonce is? StringLiteral| holder is? StringLiteral"," disclosed is? StringLiteral"," issued_vc is? StringLiteral"," nonce is? StringLiteral"," verifier_url is? StringLiteral| holder is? StringLiteral"," disclosed is? StringLiteral"," nonce is? StringLiteral"," verifier_url is? StringLiteral"," issued_vc is? StringLiteral| holder is? StringLiteral"," disclosed is? StringLiteral"," nonce is? StringLiteral"," issued_vc is? StringLiteral"," verifier_url is? StringLiteral| holder is? StringLiteral"," nonce is? StringLiteral"," verifier_url is? StringLiteral"," issued_vc is? StringLiteral"," disclosed is? StringLiteral| holder is? StringLiteral"," nonce is? StringLiteral"," verifier_url is? StringLiteral"," disclosed is? StringLiteral"," issued_vc is? StringLiteral| holder is? StringLiteral"," nonce is? StringLiteral"," issued_vc is? StringLiteral"," verifier_url is? StringLiteral"," disclosed is? StringLiteral| holder is? StringLiteral"," nonce is? StringLiteral"," issued_vc is? StringLiteral"," disclosed is? StringLiteral"," verifier_url is? StringLiteral| holder is? StringLiteral"," nonce is? StringLiteral"," disclosed is? StringLiteral"," verifier_url is? StringLiteral"," issued_vc is? StringLiteral| holder is? StringLiteral"," nonce is? StringLiteral"," disclosed is? StringLiteral"," issued_vc is? StringLiteral"," verifier_url is? StringLiteral) | + Action (with | where)( verifier_url is? StringLiteral"," issued_vc is? StringLiteral"," nonce is? StringLiteral"," issuer is? StringLiteral| verifier_url is? StringLiteral"," issued_vc is? StringLiteral"," issuer is? StringLiteral"," nonce is? StringLiteral| verifier_url is? StringLiteral"," nonce is? StringLiteral"," issued_vc is? StringLiteral"," issuer is? StringLiteral| verifier_url is? StringLiteral"," nonce is? StringLiteral"," issuer is? StringLiteral"," issued_vc is? StringLiteral| verifier_url is? StringLiteral"," issuer is? StringLiteral"," issued_vc is? StringLiteral"," nonce is? StringLiteral| verifier_url is? StringLiteral"," issuer is? StringLiteral"," nonce is? StringLiteral"," issued_vc is? StringLiteral| issued_vc is? StringLiteral"," verifier_url is? StringLiteral"," nonce is? StringLiteral"," issuer is? StringLiteral| issued_vc is? StringLiteral"," verifier_url is? StringLiteral"," issuer is? StringLiteral"," nonce is? StringLiteral| issued_vc is? StringLiteral"," nonce is? StringLiteral"," verifier_url is? StringLiteral"," issuer is? StringLiteral| issued_vc is? StringLiteral"," nonce is? StringLiteral"," issuer is? StringLiteral"," verifier_url is? StringLiteral| issued_vc is? StringLiteral"," issuer is? StringLiteral"," verifier_url is? StringLiteral"," nonce is? StringLiteral| issued_vc is? StringLiteral"," issuer is? StringLiteral"," nonce is? StringLiteral"," verifier_url is? StringLiteral| nonce is? StringLiteral"," verifier_url is? StringLiteral"," issued_vc is? StringLiteral"," issuer is? StringLiteral| nonce is? StringLiteral"," verifier_url is? StringLiteral"," issuer is? StringLiteral"," issued_vc is? StringLiteral| nonce is? StringLiteral"," issued_vc is? StringLiteral"," verifier_url is? StringLiteral"," issuer is? StringLiteral| nonce is? StringLiteral"," issued_vc is? StringLiteral"," issuer is? StringLiteral"," verifier_url is? StringLiteral| nonce is? StringLiteral"," issuer is? StringLiteral"," verifier_url is? StringLiteral"," issued_vc is? StringLiteral| nonce is? StringLiteral"," issuer is? StringLiteral"," issued_vc is? StringLiteral"," verifier_url is? StringLiteral| issuer is? StringLiteral"," verifier_url is? StringLiteral"," issued_vc is? StringLiteral"," nonce is? StringLiteral| issuer is? StringLiteral"," verifier_url is? StringLiteral"," nonce is? StringLiteral"," issued_vc is? StringLiteral| issuer is? StringLiteral"," issued_vc is? StringLiteral"," verifier_url is? StringLiteral"," nonce is? StringLiteral| issuer is? StringLiteral"," issued_vc is? StringLiteral"," nonce is? StringLiteral"," verifier_url is? StringLiteral| issuer is? StringLiteral"," nonce is? StringLiteral"," verifier_url is? StringLiteral"," issued_vc is? StringLiteral| issuer is? StringLiteral"," nonce is? StringLiteral"," issued_vc is? StringLiteral"," verifier_url is? StringLiteral) | + Action | + Action (with | where) sk is? StringLiteral | + Action (with | where) token is? StringLiteral +} +GtZencodeStatement { + ( send script StringLiteral and send data StringLiteral and send keys StringLiteral and |send script StringLiteral and send keys StringLiteral and send data StringLiteral and |send data StringLiteral and send script StringLiteral and send keys StringLiteral and |send data StringLiteral and send keys StringLiteral and send script StringLiteral and |send keys StringLiteral and send script StringLiteral and send data StringLiteral and |send keys StringLiteral and send data StringLiteral and send script StringLiteral and ) Action SaveAction? | + ( send script StringLiteral and send data StringLiteral and send keys StringLiteral and send extra StringLiteral and send conf StringLiteral and |send script StringLiteral and send data StringLiteral and send keys StringLiteral and send conf StringLiteral and send extra StringLiteral and |send script StringLiteral and send data StringLiteral and send extra StringLiteral and send keys StringLiteral and send conf StringLiteral and |send script StringLiteral and send data StringLiteral and send extra StringLiteral and send conf StringLiteral and send keys StringLiteral and |send script StringLiteral and send data StringLiteral and send conf StringLiteral and send keys StringLiteral and send extra StringLiteral and |send script StringLiteral and send data StringLiteral and send conf StringLiteral and send extra StringLiteral and send keys StringLiteral and |send script StringLiteral and send keys StringLiteral and send data StringLiteral and send extra StringLiteral and send conf StringLiteral and |send script StringLiteral and send keys StringLiteral and send data StringLiteral and send conf StringLiteral and send extra StringLiteral and |send script StringLiteral and send keys StringLiteral and send extra StringLiteral and send data StringLiteral and send conf StringLiteral and |send script StringLiteral and send keys StringLiteral and send extra StringLiteral and send conf StringLiteral and send data StringLiteral and |send script StringLiteral and send keys StringLiteral and send conf StringLiteral and send data StringLiteral and send extra StringLiteral and |send script StringLiteral and send keys StringLiteral and send conf StringLiteral and send extra StringLiteral and send data StringLiteral and |send script StringLiteral and send extra StringLiteral and send data StringLiteral and send keys StringLiteral and send conf StringLiteral and |send script StringLiteral and send extra StringLiteral and send data StringLiteral and send conf StringLiteral and send keys StringLiteral and |send script StringLiteral and send extra StringLiteral and send keys StringLiteral and send data StringLiteral and send conf StringLiteral and |send script StringLiteral and send extra StringLiteral and send keys StringLiteral and send conf StringLiteral and send data StringLiteral and |send script StringLiteral and send extra StringLiteral and send conf StringLiteral and send data StringLiteral and send keys StringLiteral and |send script StringLiteral and send extra StringLiteral and send conf StringLiteral and send keys StringLiteral and send data StringLiteral and |send script StringLiteral and send conf StringLiteral and send data StringLiteral and send keys StringLiteral and send extra StringLiteral and |send script StringLiteral and send conf StringLiteral and send data StringLiteral and send extra StringLiteral and send keys StringLiteral and |send script StringLiteral and send conf StringLiteral and send keys StringLiteral and send data StringLiteral and send extra StringLiteral and |send script StringLiteral and send conf StringLiteral and send keys StringLiteral and send extra StringLiteral and send data StringLiteral and |send script StringLiteral and send conf StringLiteral and send extra StringLiteral and send data StringLiteral and send keys StringLiteral and |send script StringLiteral and send conf StringLiteral and send extra StringLiteral and send keys StringLiteral and send data StringLiteral and |send data StringLiteral and send script StringLiteral and send keys StringLiteral and send extra StringLiteral and send conf StringLiteral and |send data StringLiteral and send script StringLiteral and send keys StringLiteral and send conf StringLiteral and send extra StringLiteral and |send data StringLiteral and send script StringLiteral and send extra StringLiteral and send keys StringLiteral and send conf StringLiteral and |send data StringLiteral and send script StringLiteral and send extra StringLiteral and send conf StringLiteral and send keys StringLiteral and |send data StringLiteral and send script StringLiteral and send conf StringLiteral and send keys StringLiteral and send extra StringLiteral and |send data StringLiteral and send script StringLiteral and send conf StringLiteral and send extra StringLiteral and send keys StringLiteral and |send data StringLiteral and send keys StringLiteral and send script StringLiteral and send extra StringLiteral and send conf StringLiteral and |send data StringLiteral and send keys StringLiteral and send script StringLiteral and send conf StringLiteral and send extra StringLiteral and |send data StringLiteral and send keys StringLiteral and send extra StringLiteral and send script StringLiteral and send conf StringLiteral and |send data StringLiteral and send keys StringLiteral and send extra StringLiteral and send conf StringLiteral and send script StringLiteral and |send data StringLiteral and send keys StringLiteral and send conf StringLiteral and send script StringLiteral and send extra StringLiteral and |send data StringLiteral and send keys StringLiteral and send conf StringLiteral and send extra StringLiteral and send script StringLiteral and |send data StringLiteral and send extra StringLiteral and send script StringLiteral and send keys StringLiteral and send conf StringLiteral and |send data StringLiteral and send extra StringLiteral and send script StringLiteral and send conf StringLiteral and send keys StringLiteral and |send data StringLiteral and send extra StringLiteral and send keys StringLiteral and send script StringLiteral and send conf StringLiteral and |send data StringLiteral and send extra StringLiteral and send keys StringLiteral and send conf StringLiteral and send script StringLiteral and |send data StringLiteral and send extra StringLiteral and send conf StringLiteral and send script StringLiteral and send keys StringLiteral and |send data StringLiteral and send extra StringLiteral and send conf StringLiteral and send keys StringLiteral and send script StringLiteral and |send data StringLiteral and send conf StringLiteral and send script StringLiteral and send keys StringLiteral and send extra StringLiteral and |send data StringLiteral and send conf StringLiteral and send script StringLiteral and send extra StringLiteral and send keys StringLiteral and |send data StringLiteral and send conf StringLiteral and send keys StringLiteral and send script StringLiteral and send extra StringLiteral and |send data StringLiteral and send conf StringLiteral and send keys StringLiteral and send extra StringLiteral and send script StringLiteral and |send data StringLiteral and send conf StringLiteral and send extra StringLiteral and send script StringLiteral and send keys StringLiteral and |send data StringLiteral and send conf StringLiteral and send extra StringLiteral and send keys StringLiteral and send script StringLiteral and |send keys StringLiteral and send script StringLiteral and send data StringLiteral and send extra StringLiteral and send conf StringLiteral and |send keys StringLiteral and send script StringLiteral and send data StringLiteral and send conf StringLiteral and send extra StringLiteral and |send keys StringLiteral and send script StringLiteral and send extra StringLiteral and send data StringLiteral and send conf StringLiteral and |send keys StringLiteral and send script StringLiteral and send extra StringLiteral and send conf StringLiteral and send data StringLiteral and |send keys StringLiteral and send script StringLiteral and send conf StringLiteral and send data StringLiteral and send extra StringLiteral and |send keys StringLiteral and send script StringLiteral and send conf StringLiteral and send extra StringLiteral and send data StringLiteral and |send keys StringLiteral and send data StringLiteral and send script StringLiteral and send extra StringLiteral and send conf StringLiteral and |send keys StringLiteral and send data StringLiteral and send script StringLiteral and send conf StringLiteral and send extra StringLiteral and |send keys StringLiteral and send data StringLiteral and send extra StringLiteral and send script StringLiteral and send conf StringLiteral and |send keys StringLiteral and send data StringLiteral and send extra StringLiteral and send conf StringLiteral and send script StringLiteral and |send keys StringLiteral and send data StringLiteral and send conf StringLiteral and send script StringLiteral and send extra StringLiteral and |send keys StringLiteral and send data StringLiteral and send conf StringLiteral and send extra StringLiteral and send script StringLiteral and |send keys StringLiteral and send extra StringLiteral and send script StringLiteral and send data StringLiteral and send conf StringLiteral and |send keys StringLiteral and send extra StringLiteral and send script StringLiteral and send conf StringLiteral and send data StringLiteral and |send keys StringLiteral and send extra StringLiteral and send data StringLiteral and send script StringLiteral and send conf StringLiteral and |send keys StringLiteral and send extra StringLiteral and send data StringLiteral and send conf StringLiteral and send script StringLiteral and |send keys StringLiteral and send extra StringLiteral and send conf StringLiteral and send script StringLiteral and send data StringLiteral and |send keys StringLiteral and send extra StringLiteral and send conf StringLiteral and send data StringLiteral and send script StringLiteral and |send keys StringLiteral and send conf StringLiteral and send script StringLiteral and send data StringLiteral and send extra StringLiteral and |send keys StringLiteral and send conf StringLiteral and send script StringLiteral and send extra StringLiteral and send data StringLiteral and |send keys StringLiteral and send conf StringLiteral and send data StringLiteral and send script StringLiteral and send extra StringLiteral and |send keys StringLiteral and send conf StringLiteral and send data StringLiteral and send extra StringLiteral and send script StringLiteral and |send keys StringLiteral and send conf StringLiteral and send extra StringLiteral and send script StringLiteral and send data StringLiteral and |send keys StringLiteral and send conf StringLiteral and send extra StringLiteral and send data StringLiteral and send script StringLiteral and |send extra StringLiteral and send script StringLiteral and send data StringLiteral and send keys StringLiteral and send conf StringLiteral and |send extra StringLiteral and send script StringLiteral and send data StringLiteral and send conf StringLiteral and send keys StringLiteral and |send extra StringLiteral and send script StringLiteral and send keys StringLiteral and send data StringLiteral and send conf StringLiteral and |send extra StringLiteral and send script StringLiteral and send keys StringLiteral and send conf StringLiteral and send data StringLiteral and |send extra StringLiteral and send script StringLiteral and send conf StringLiteral and send data StringLiteral and send keys StringLiteral and |send extra StringLiteral and send script StringLiteral and send conf StringLiteral and send keys StringLiteral and send data StringLiteral and |send extra StringLiteral and send data StringLiteral and send script StringLiteral and send keys StringLiteral and send conf StringLiteral and |send extra StringLiteral and send data StringLiteral and send script StringLiteral and send conf StringLiteral and send keys StringLiteral and |send extra StringLiteral and send data StringLiteral and send keys StringLiteral and send script StringLiteral and send conf StringLiteral and |send extra StringLiteral and send data StringLiteral and send keys StringLiteral and send conf StringLiteral and send script StringLiteral and |send extra StringLiteral and send data StringLiteral and send conf StringLiteral and send script StringLiteral and send keys StringLiteral and |send extra StringLiteral and send data StringLiteral and send conf StringLiteral and send keys StringLiteral and send script StringLiteral and |send extra StringLiteral and send keys StringLiteral and send script StringLiteral and send data StringLiteral and send conf StringLiteral and |send extra StringLiteral and send keys StringLiteral and send script StringLiteral and send conf StringLiteral and send data StringLiteral and |send extra StringLiteral and send keys StringLiteral and send data StringLiteral and send script StringLiteral and send conf StringLiteral and |send extra StringLiteral and send keys StringLiteral and send data StringLiteral and send conf StringLiteral and send script StringLiteral and |send extra StringLiteral and send keys StringLiteral and send conf StringLiteral and send script StringLiteral and send data StringLiteral and |send extra StringLiteral and send keys StringLiteral and send conf StringLiteral and send data StringLiteral and send script StringLiteral and |send extra StringLiteral and send conf StringLiteral and send script StringLiteral and send data StringLiteral and send keys StringLiteral and |send extra StringLiteral and send conf StringLiteral and send script StringLiteral and send keys StringLiteral and send data StringLiteral and |send extra StringLiteral and send conf StringLiteral and send data StringLiteral and send script StringLiteral and send keys StringLiteral and |send extra StringLiteral and send conf StringLiteral and send data StringLiteral and send keys StringLiteral and send script StringLiteral and |send extra StringLiteral and send conf StringLiteral and send keys StringLiteral and send script StringLiteral and send data StringLiteral and |send extra StringLiteral and send conf StringLiteral and send keys StringLiteral and send data StringLiteral and send script StringLiteral and |send conf StringLiteral and send script StringLiteral and send data StringLiteral and send keys StringLiteral and send extra StringLiteral and |send conf StringLiteral and send script StringLiteral and send data StringLiteral and send extra StringLiteral and send keys StringLiteral and |send conf StringLiteral and send script StringLiteral and send keys StringLiteral and send data StringLiteral and send extra StringLiteral and |send conf StringLiteral and send script StringLiteral and send keys StringLiteral and send extra StringLiteral and send data StringLiteral and |send conf StringLiteral and send script StringLiteral and send extra StringLiteral and send data StringLiteral and send keys StringLiteral and |send conf StringLiteral and send script StringLiteral and send extra StringLiteral and send keys StringLiteral and send data StringLiteral and |send conf StringLiteral and send data StringLiteral and send script StringLiteral and send keys StringLiteral and send extra StringLiteral and |send conf StringLiteral and send data StringLiteral and send script StringLiteral and send extra StringLiteral and send keys StringLiteral and |send conf StringLiteral and send data StringLiteral and send keys StringLiteral and send script StringLiteral and send extra StringLiteral and |send conf StringLiteral and send data StringLiteral and send keys StringLiteral and send extra StringLiteral and send script StringLiteral and |send conf StringLiteral and send data StringLiteral and send extra StringLiteral and send script StringLiteral and send keys StringLiteral and |send conf StringLiteral and send data StringLiteral and send extra StringLiteral and send keys StringLiteral and send script StringLiteral and |send conf StringLiteral and send keys StringLiteral and send script StringLiteral and send data StringLiteral and send extra StringLiteral and |send conf StringLiteral and send keys StringLiteral and send script StringLiteral and send extra StringLiteral and send data StringLiteral and |send conf StringLiteral and send keys StringLiteral and send data StringLiteral and send script StringLiteral and send extra StringLiteral and |send conf StringLiteral and send keys StringLiteral and send data StringLiteral and send extra StringLiteral and send script StringLiteral and |send conf StringLiteral and send keys StringLiteral and send extra StringLiteral and send script StringLiteral and send data StringLiteral and |send conf StringLiteral and send keys StringLiteral and send extra StringLiteral and send data StringLiteral and send script StringLiteral and |send conf StringLiteral and send extra StringLiteral and send script StringLiteral and send data StringLiteral and send keys StringLiteral and |send conf StringLiteral and send extra StringLiteral and send script StringLiteral and send keys StringLiteral and send data StringLiteral and |send conf StringLiteral and send extra StringLiteral and send data StringLiteral and send script StringLiteral and send keys StringLiteral and |send conf StringLiteral and send extra StringLiteral and send data StringLiteral and send keys StringLiteral and send script StringLiteral and |send conf StringLiteral and send extra StringLiteral and send keys StringLiteral and send script StringLiteral and send data StringLiteral and |send conf StringLiteral and send extra StringLiteral and send keys StringLiteral and send data StringLiteral and send script StringLiteral and ) Action SaveAction? +} +PcZencodeStatement { + Action (with | where)( script is? StringLiteral"," data is? StringLiteral"," keys is? StringLiteral| script is? StringLiteral"," keys is? StringLiteral"," data is? StringLiteral| data is? StringLiteral"," script is? StringLiteral"," keys is? StringLiteral| data is? StringLiteral"," keys is? StringLiteral"," script is? StringLiteral| keys is? StringLiteral"," script is? StringLiteral"," data is? StringLiteral| keys is? StringLiteral"," data is? StringLiteral"," script is? StringLiteral) | + Action (with | where)( script is? StringLiteral"," data is? StringLiteral"," keys is? StringLiteral"," extra is? StringLiteral"," conf is? StringLiteral| script is? StringLiteral"," data is? StringLiteral"," keys is? StringLiteral"," conf is? StringLiteral"," extra is? StringLiteral| script is? StringLiteral"," data is? StringLiteral"," extra is? StringLiteral"," keys is? StringLiteral"," conf is? StringLiteral| script is? StringLiteral"," data is? StringLiteral"," extra is? StringLiteral"," conf is? StringLiteral"," keys is? StringLiteral| script is? StringLiteral"," data is? StringLiteral"," conf is? StringLiteral"," keys is? StringLiteral"," extra is? StringLiteral| script is? StringLiteral"," data is? StringLiteral"," conf is? StringLiteral"," extra is? StringLiteral"," keys is? StringLiteral| script is? StringLiteral"," keys is? StringLiteral"," data is? StringLiteral"," extra is? StringLiteral"," conf is? StringLiteral| script is? StringLiteral"," keys is? StringLiteral"," data is? StringLiteral"," conf is? StringLiteral"," extra is? StringLiteral| script is? StringLiteral"," keys is? StringLiteral"," extra is? StringLiteral"," data is? StringLiteral"," conf is? StringLiteral| script is? StringLiteral"," keys is? StringLiteral"," extra is? StringLiteral"," conf is? StringLiteral"," data is? StringLiteral| script is? StringLiteral"," keys is? StringLiteral"," conf is? StringLiteral"," data is? StringLiteral"," extra is? StringLiteral| script is? StringLiteral"," keys is? StringLiteral"," conf is? StringLiteral"," extra is? StringLiteral"," data is? StringLiteral| script is? StringLiteral"," extra is? StringLiteral"," data is? StringLiteral"," keys is? StringLiteral"," conf is? StringLiteral| script is? StringLiteral"," extra is? StringLiteral"," data is? StringLiteral"," conf is? StringLiteral"," keys is? StringLiteral| script is? StringLiteral"," extra is? StringLiteral"," keys is? StringLiteral"," data is? StringLiteral"," conf is? StringLiteral| script is? StringLiteral"," extra is? StringLiteral"," keys is? StringLiteral"," conf is? StringLiteral"," data is? StringLiteral| script is? StringLiteral"," extra is? StringLiteral"," conf is? StringLiteral"," data is? StringLiteral"," keys is? StringLiteral| script is? StringLiteral"," extra is? StringLiteral"," conf is? StringLiteral"," keys is? StringLiteral"," data is? StringLiteral| script is? StringLiteral"," conf is? StringLiteral"," data is? StringLiteral"," keys is? StringLiteral"," extra is? StringLiteral| script is? StringLiteral"," conf is? StringLiteral"," data is? StringLiteral"," extra is? StringLiteral"," keys is? StringLiteral| script is? StringLiteral"," conf is? StringLiteral"," keys is? StringLiteral"," data is? StringLiteral"," extra is? StringLiteral| script is? StringLiteral"," conf is? StringLiteral"," keys is? StringLiteral"," extra is? StringLiteral"," data is? StringLiteral| script is? StringLiteral"," conf is? StringLiteral"," extra is? StringLiteral"," data is? StringLiteral"," keys is? StringLiteral| script is? StringLiteral"," conf is? StringLiteral"," extra is? StringLiteral"," keys is? StringLiteral"," data is? StringLiteral| data is? StringLiteral"," script is? StringLiteral"," keys is? StringLiteral"," extra is? StringLiteral"," conf is? StringLiteral| data is? StringLiteral"," script is? StringLiteral"," keys is? StringLiteral"," conf is? StringLiteral"," extra is? StringLiteral| data is? StringLiteral"," script is? StringLiteral"," extra is? StringLiteral"," keys is? StringLiteral"," conf is? StringLiteral| data is? StringLiteral"," script is? StringLiteral"," extra is? StringLiteral"," conf is? StringLiteral"," keys is? StringLiteral| data is? StringLiteral"," script is? StringLiteral"," conf is? StringLiteral"," keys is? StringLiteral"," extra is? StringLiteral| data is? StringLiteral"," script is? StringLiteral"," conf is? StringLiteral"," extra is? StringLiteral"," keys is? StringLiteral| data is? StringLiteral"," keys is? StringLiteral"," script is? StringLiteral"," extra is? StringLiteral"," conf is? StringLiteral| data is? StringLiteral"," keys is? StringLiteral"," script is? StringLiteral"," conf is? StringLiteral"," extra is? StringLiteral| data is? StringLiteral"," keys is? StringLiteral"," extra is? StringLiteral"," script is? StringLiteral"," conf is? StringLiteral| data is? StringLiteral"," keys is? StringLiteral"," extra is? StringLiteral"," conf is? StringLiteral"," script is? StringLiteral| data is? StringLiteral"," keys is? StringLiteral"," conf is? StringLiteral"," script is? StringLiteral"," extra is? StringLiteral| data is? StringLiteral"," keys is? StringLiteral"," conf is? StringLiteral"," extra is? StringLiteral"," script is? StringLiteral| data is? StringLiteral"," extra is? StringLiteral"," script is? StringLiteral"," keys is? StringLiteral"," conf is? StringLiteral| data is? StringLiteral"," extra is? StringLiteral"," script is? StringLiteral"," conf is? StringLiteral"," keys is? StringLiteral| data is? StringLiteral"," extra is? StringLiteral"," keys is? StringLiteral"," script is? StringLiteral"," conf is? StringLiteral| data is? StringLiteral"," extra is? StringLiteral"," keys is? StringLiteral"," conf is? StringLiteral"," script is? StringLiteral| data is? StringLiteral"," extra is? StringLiteral"," conf is? StringLiteral"," script is? StringLiteral"," keys is? StringLiteral| data is? StringLiteral"," extra is? StringLiteral"," conf is? StringLiteral"," keys is? StringLiteral"," script is? StringLiteral| data is? StringLiteral"," conf is? StringLiteral"," script is? StringLiteral"," keys is? StringLiteral"," extra is? StringLiteral| data is? StringLiteral"," conf is? StringLiteral"," script is? StringLiteral"," extra is? StringLiteral"," keys is? StringLiteral| data is? StringLiteral"," conf is? StringLiteral"," keys is? StringLiteral"," script is? StringLiteral"," extra is? StringLiteral| data is? StringLiteral"," conf is? StringLiteral"," keys is? StringLiteral"," extra is? StringLiteral"," script is? StringLiteral| data is? StringLiteral"," conf is? StringLiteral"," extra is? StringLiteral"," script is? StringLiteral"," keys is? StringLiteral| data is? StringLiteral"," conf is? StringLiteral"," extra is? StringLiteral"," keys is? StringLiteral"," script is? StringLiteral| keys is? StringLiteral"," script is? StringLiteral"," data is? StringLiteral"," extra is? StringLiteral"," conf is? StringLiteral| keys is? StringLiteral"," script is? StringLiteral"," data is? StringLiteral"," conf is? StringLiteral"," extra is? StringLiteral| keys is? StringLiteral"," script is? StringLiteral"," extra is? StringLiteral"," data is? StringLiteral"," conf is? StringLiteral| keys is? StringLiteral"," script is? StringLiteral"," extra is? StringLiteral"," conf is? StringLiteral"," data is? StringLiteral| keys is? StringLiteral"," script is? StringLiteral"," conf is? StringLiteral"," data is? StringLiteral"," extra is? StringLiteral| keys is? StringLiteral"," script is? StringLiteral"," conf is? StringLiteral"," extra is? StringLiteral"," data is? StringLiteral| keys is? StringLiteral"," data is? StringLiteral"," script is? StringLiteral"," extra is? StringLiteral"," conf is? StringLiteral| keys is? StringLiteral"," data is? StringLiteral"," script is? StringLiteral"," conf is? StringLiteral"," extra is? StringLiteral| keys is? StringLiteral"," data is? StringLiteral"," extra is? StringLiteral"," script is? StringLiteral"," conf is? StringLiteral| keys is? StringLiteral"," data is? StringLiteral"," extra is? StringLiteral"," conf is? StringLiteral"," script is? StringLiteral| keys is? StringLiteral"," data is? StringLiteral"," conf is? StringLiteral"," script is? StringLiteral"," extra is? StringLiteral| keys is? StringLiteral"," data is? StringLiteral"," conf is? StringLiteral"," extra is? StringLiteral"," script is? StringLiteral| keys is? StringLiteral"," extra is? StringLiteral"," script is? StringLiteral"," data is? StringLiteral"," conf is? StringLiteral| keys is? StringLiteral"," extra is? StringLiteral"," script is? StringLiteral"," conf is? StringLiteral"," data is? StringLiteral| keys is? StringLiteral"," extra is? StringLiteral"," data is? StringLiteral"," script is? StringLiteral"," conf is? StringLiteral| keys is? StringLiteral"," extra is? StringLiteral"," data is? StringLiteral"," conf is? StringLiteral"," script is? StringLiteral| keys is? StringLiteral"," extra is? StringLiteral"," conf is? StringLiteral"," script is? StringLiteral"," data is? StringLiteral| keys is? StringLiteral"," extra is? StringLiteral"," conf is? StringLiteral"," data is? StringLiteral"," script is? StringLiteral| keys is? StringLiteral"," conf is? StringLiteral"," script is? StringLiteral"," data is? StringLiteral"," extra is? StringLiteral| keys is? StringLiteral"," conf is? StringLiteral"," script is? StringLiteral"," extra is? StringLiteral"," data is? StringLiteral| keys is? StringLiteral"," conf is? StringLiteral"," data is? StringLiteral"," script is? StringLiteral"," extra is? StringLiteral| keys is? StringLiteral"," conf is? StringLiteral"," data is? StringLiteral"," extra is? StringLiteral"," script is? StringLiteral| keys is? StringLiteral"," conf is? StringLiteral"," extra is? StringLiteral"," script is? StringLiteral"," data is? StringLiteral| keys is? StringLiteral"," conf is? StringLiteral"," extra is? StringLiteral"," data is? StringLiteral"," script is? StringLiteral| extra is? StringLiteral"," script is? StringLiteral"," data is? StringLiteral"," keys is? StringLiteral"," conf is? StringLiteral| extra is? StringLiteral"," script is? StringLiteral"," data is? StringLiteral"," conf is? StringLiteral"," keys is? StringLiteral| extra is? StringLiteral"," script is? StringLiteral"," keys is? StringLiteral"," data is? StringLiteral"," conf is? StringLiteral| extra is? StringLiteral"," script is? StringLiteral"," keys is? StringLiteral"," conf is? StringLiteral"," data is? StringLiteral| extra is? StringLiteral"," script is? StringLiteral"," conf is? StringLiteral"," data is? StringLiteral"," keys is? StringLiteral| extra is? StringLiteral"," script is? StringLiteral"," conf is? StringLiteral"," keys is? StringLiteral"," data is? StringLiteral| extra is? StringLiteral"," data is? StringLiteral"," script is? StringLiteral"," keys is? StringLiteral"," conf is? StringLiteral| extra is? StringLiteral"," data is? StringLiteral"," script is? StringLiteral"," conf is? StringLiteral"," keys is? StringLiteral| extra is? StringLiteral"," data is? StringLiteral"," keys is? StringLiteral"," script is? StringLiteral"," conf is? StringLiteral| extra is? StringLiteral"," data is? StringLiteral"," keys is? StringLiteral"," conf is? StringLiteral"," script is? StringLiteral| extra is? StringLiteral"," data is? StringLiteral"," conf is? StringLiteral"," script is? StringLiteral"," keys is? StringLiteral| extra is? StringLiteral"," data is? StringLiteral"," conf is? StringLiteral"," keys is? StringLiteral"," script is? StringLiteral| extra is? StringLiteral"," keys is? StringLiteral"," script is? StringLiteral"," data is? StringLiteral"," conf is? StringLiteral| extra is? StringLiteral"," keys is? StringLiteral"," script is? StringLiteral"," conf is? StringLiteral"," data is? StringLiteral| extra is? StringLiteral"," keys is? StringLiteral"," data is? StringLiteral"," script is? StringLiteral"," conf is? StringLiteral| extra is? StringLiteral"," keys is? StringLiteral"," data is? StringLiteral"," conf is? StringLiteral"," script is? StringLiteral| extra is? StringLiteral"," keys is? StringLiteral"," conf is? StringLiteral"," script is? StringLiteral"," data is? StringLiteral| extra is? StringLiteral"," keys is? StringLiteral"," conf is? StringLiteral"," data is? StringLiteral"," script is? StringLiteral| extra is? StringLiteral"," conf is? StringLiteral"," script is? StringLiteral"," data is? StringLiteral"," keys is? StringLiteral| extra is? StringLiteral"," conf is? StringLiteral"," script is? StringLiteral"," keys is? StringLiteral"," data is? StringLiteral| extra is? StringLiteral"," conf is? StringLiteral"," data is? StringLiteral"," script is? StringLiteral"," keys is? StringLiteral| extra is? StringLiteral"," conf is? StringLiteral"," data is? StringLiteral"," keys is? StringLiteral"," script is? StringLiteral| extra is? StringLiteral"," conf is? StringLiteral"," keys is? StringLiteral"," script is? StringLiteral"," data is? StringLiteral| extra is? StringLiteral"," conf is? StringLiteral"," keys is? StringLiteral"," data is? StringLiteral"," script is? StringLiteral| conf is? StringLiteral"," script is? StringLiteral"," data is? StringLiteral"," keys is? StringLiteral"," extra is? StringLiteral| conf is? StringLiteral"," script is? StringLiteral"," data is? StringLiteral"," extra is? StringLiteral"," keys is? StringLiteral| conf is? StringLiteral"," script is? StringLiteral"," keys is? StringLiteral"," data is? StringLiteral"," extra is? StringLiteral| conf is? StringLiteral"," script is? StringLiteral"," keys is? StringLiteral"," extra is? StringLiteral"," data is? StringLiteral| conf is? StringLiteral"," script is? StringLiteral"," extra is? StringLiteral"," data is? StringLiteral"," keys is? StringLiteral| conf is? StringLiteral"," script is? StringLiteral"," extra is? StringLiteral"," keys is? StringLiteral"," data is? StringLiteral| conf is? StringLiteral"," data is? StringLiteral"," script is? StringLiteral"," keys is? StringLiteral"," extra is? StringLiteral| conf is? StringLiteral"," data is? StringLiteral"," script is? StringLiteral"," extra is? StringLiteral"," keys is? StringLiteral| conf is? StringLiteral"," data is? StringLiteral"," keys is? StringLiteral"," script is? StringLiteral"," extra is? StringLiteral| conf is? StringLiteral"," data is? StringLiteral"," keys is? StringLiteral"," extra is? StringLiteral"," script is? StringLiteral| conf is? StringLiteral"," data is? StringLiteral"," extra is? StringLiteral"," script is? StringLiteral"," keys is? StringLiteral| conf is? StringLiteral"," data is? StringLiteral"," extra is? StringLiteral"," keys is? StringLiteral"," script is? StringLiteral| conf is? StringLiteral"," keys is? StringLiteral"," script is? StringLiteral"," data is? StringLiteral"," extra is? StringLiteral| conf is? StringLiteral"," keys is? StringLiteral"," script is? StringLiteral"," extra is? StringLiteral"," data is? StringLiteral| conf is? StringLiteral"," keys is? StringLiteral"," data is? StringLiteral"," script is? StringLiteral"," extra is? StringLiteral| conf is? StringLiteral"," keys is? StringLiteral"," data is? StringLiteral"," extra is? StringLiteral"," script is? StringLiteral| conf is? StringLiteral"," keys is? StringLiteral"," extra is? StringLiteral"," script is? StringLiteral"," data is? StringLiteral| conf is? StringLiteral"," keys is? StringLiteral"," extra is? StringLiteral"," data is? StringLiteral"," script is? StringLiteral| conf is? StringLiteral"," extra is? StringLiteral"," script is? StringLiteral"," data is? StringLiteral"," keys is? StringLiteral| conf is? StringLiteral"," extra is? StringLiteral"," script is? StringLiteral"," keys is? StringLiteral"," data is? StringLiteral| conf is? StringLiteral"," extra is? StringLiteral"," data is? StringLiteral"," script is? StringLiteral"," keys is? StringLiteral| conf is? StringLiteral"," extra is? StringLiteral"," data is? StringLiteral"," keys is? StringLiteral"," script is? StringLiteral| conf is? StringLiteral"," extra is? StringLiteral"," keys is? StringLiteral"," script is? StringLiteral"," data is? StringLiteral| conf is? StringLiteral"," extra is? StringLiteral"," keys is? StringLiteral"," data is? StringLiteral"," script is? StringLiteral) +} + +// ===== Actions ===== + +Action { + term } SaveAction { - output (Keywords | Identifier | StringLiteral)? into StringLiteral + and output secret? into StringLiteral } +// ===== Keywords and Token ===== + Keywords { - version | unknown | ignore | have | a | my | that | valid | inside | named | am | known | as | connect | to | open | and | send | statement | parameters | record | table | variable | name | address | transaction_id | - addresses | transaction | sc | path | content | commit | paths | array | values | value | sources | properties | headers | object | json_data | json_schema | request | uri | server_data | client | expires_in | - token | request_uri | data | my_credentials | email | list_parameters | show_parameters | create_parameters | record_parameters | update_parameters | delete_parameters | send_parameters | url | text | command | jwk | - holder | fields | verifier_url | issued_vc | disclosed | nonce | sk | script | key | keys | extra | conf | execute | sql | with | read | file | the | of | database | save | ethereum | bytes | balance | suggested | - gas | price | id | after | broadcast | erc20 | decimals | symbol | total | supply | erc721 | in | owner | asset | download | extract | verbatim | store | list | directory | exists | does | not | exist | verify | git | - repository | clone | create | new | manipulate | get | set | merge | omit | concat | compact | pick | do | sequential | parallel | same | post | put | patch | validate | json | generate | access | authorization | code | - details | from | add | start | pb | capacitor | login | ask | password | reset | some | records | one | qr | update | write | into | redis | delete | shell | fetch | local | timestamp | milliseconds | seconds | present | vc | - sd | jwt | p256 | public | pretty | print | zencode | output | is | given | then | when | rule | scenario | if | endif | foreach | endforeach | I + given | then | I | prepare | compute | open | connect | to | send | and | where | is | with | output | secret | into | scenario | rule | version | unknown | ignore | when | foreach | endforeach | if | endif | that | have | a | my | the | valid | named | in | inside | am | name | known | as | verify | print | statement | execute | sql | parameters | parametrized | record | table | read | of | variable | save | database | address | ethereum | nonce | transaction_id | bytes | balance | addresses | suggested | gas | price | transaction | id | after | broadcast | sc | erc20 | decimals | symbol | total | supply | erc721 | owner | asset | path | download | extract | file | content | verbatim | store | list | directory | exists | does | not | exist | git | repository | clone | commit | create | new | object | manipulate | get | value | set | sources | merge | paths | omit | array | values | concat | compact | properties | pick | delete | do | headers | sequential | parallel | same | post | put | patch | json_data | json_schema | validate | json | request | server_data | generate | access | token | authorization | code | client | expires_in | uri | details | from | request_uri | data | add | redirect_uri | start | pb | capacitor | my_credentials | login | refresh | email | ask | password | reset | list_parameters | some | records | show_parameters | one | create_parameters | record_parameters | update_parameters | update | delete_parameters | url | send_parameters | text | qr | dictionary | serialized | canonical | rdf | key | write | redis | command | shell | fetch | local | timestamp | milliseconds | seconds | jwk | holder | fields | vc | sd | jwt | verifier_url | issued_vc | disclosed | present | issuer | p256 | sk | public | pretty | script | keys | zencode | extra | conf } @external specialize {Identifier} keywords from "./tokens" { - given[@name=given], version[@name=version], unknown[@name=unknown], ignore[@name=ignore], have[@name=have], a[@name=a], my[@name=my], that[@name=that], valid[@name=valid], inside[@name=inside], named[@name=named], am[@name=am], known[@name=known], - as[@name=as], connect[@name=connect], to[@name=to], open[@name=open] and[@name=and], send[@name=send], statement[@name=statement], parameters[@name=parameters], record[@name=record], table[@name=table], variable[@name=variable], name[@name=name], - address[@name=address], transaction_id[@name=transaction_id], addresses[@name=addresses], transaction[@name=transaction], sc[@name=sc], path[@name=path], content[@name=content], commit[@name=commit], paths[@name=paths], - array[@name=array], values[@name=values], value[@name=value], sources[@name=sources], properties[@name=properties], headers[@name=headers], object[@name=object], json_data[@name=json_data], json_schema[@name=json_schema], - request[@name=request], server_data[@name=server_data], client[@name=client], expires_in[@name=expires_in], token[@name=token], request_uri[@name=request_uri], data[@name=data], my_credentials[@name=my_credentials], - email[@name=email], list_parameters[@name=list_parameters], show_parameters[@name=show_parameters], create_parameters[@name=create_parameters], record_parameters[@name=record_parameters], update_parameters[@name=update_parameters], - delete_parameters[@name=delete_parameters], send_parameters[@name=send_parameters], url[@name=url], text[@name=text], command[@name=command], jwk[@name=jwk], holder[@name=holder], fields[@name=fields], verifier_url[@name=verifier_url], issued_vc[@name=issued_vc], - disclosed[@name=disclosed], nonce[@name=nonce], sk[@name=sk], script[@name=script], key[@name=key], keys[@name=keys], extra[@name=extra], conf[@name=conf], execute[@name=execute], sql[@name=sql], with[@name=with], read[@name=read], - file[@name=file], the[@name=the], of[@name=of], database[@name=database], save[@name=save], ethereum[@name=ethereum], bytes[@name=bytes], balance[@name=balance], suggested[@name=suggested], gas[@name=gas], price[@name=price], id[@name=id], - after[@name=after], broadcast[@name=broadcast], erc20[@name=erc20], decimals[@name=decimals], symbol[@name=symbol], total[@name=total], supply[@name=supply], erc721[@name=erc721], in[@name=in], owner[@name=owner], - asset[@name=asset], download[@name=download], extract[@name=extract], verbatim[@name=verbatim], store[@name=store], list[@name=list], directory[@name=directory], exists[@name=exists], does[@name=does], - not[@name=not], exist[@name=exist], verify[@name=verify], git[@name=git], repository[@name=repository], clone[@name=clone], create[@name=create], new[@name=new], manipulate[@name=manipulate], get[@name=get], set[@name=set], merge[@name=merge], - omit[@name=omit],uri[@name=uri], concat[@name=concat], compact[@name=compact], pick[@name=pick], do[@name=do], sequential[@name=sequential], parallel[@name=parallel], same[@name=same], post[@name=post], put[@name=put], patch[@name=patch], - validate[@name=validate], json[@name=json], generate[@name=generate], access[@name=access], authorization[@name=authorization], code[@name=code], details[@name=details], from[@name=from], add[@name=add], start[@name=start], - pb[@name=pb], capacitor[@name=capacitor], login[@name=login], ask[@name=ask], password[@name=password], reset[@name=reset], some[@name=some], records[@name=records], one[@name=one], update[@name=update], qr[@name=qr], write[@name=write], - into[@name=into], redis[@name=redis], delete[@name=delete], shell[@name=shell], fetch[@name=fetch], local[@name=local], timestamp[@name=timestamp], milliseconds[@name=milliseconds], seconds[@name=seconds], present[@name=present] - vc[@name=vc], sd[@name=sd], jwt[@name=jwt], public[@name=public], pretty[@name=pretty], print[@name=print], zencode[@name=zencode], output[@name=output], is[@name=is], then[@name=then], - when[@name=when], rule[@name=rule], scenario[@name=scenario], if[@name=if], endif[@name=endif], foreach[@name=foreach], endforeach[@name=endforeach], I[@name=I], p256[@name=p256] - + given[@name=given], then[@name=then], I[@name=I], prepare[@name=prepare], compute[@name=compute], open[@name=open], connect[@name=connect], to[@name=to], send[@name=send], and[@name=and], where[@name=where], is[@name=is], with[@name=with], output[@name=output], secret[@name=secret], into[@name=into], scenario[@name=scenario], rule[@name=rule], version[@name=version], unknown[@name=unknown], ignore[@name=ignore], when[@name=when], foreach[@name=foreach], endforeach[@name=endforeach], if[@name=if], endif[@name=endif], that[@name=that], have[@name=have], a[@name=a], my[@name=my], the[@name=the], valid[@name=valid], named[@name=named], in[@name=in], inside[@name=inside], am[@name=am], name[@name=name], known[@name=known], as[@name=as], verify[@name=verify], print[@name=print], statement[@name=statement], execute[@name=execute], sql[@name=sql], parameters[@name=parameters], parametrized[@name=parametrized], record[@name=record], table[@name=table], read[@name=read], of[@name=of], variable[@name=variable], save[@name=save], database[@name=database], address[@name=address], ethereum[@name=ethereum], nonce[@name=nonce], transaction_id[@name=transaction_id], bytes[@name=bytes], balance[@name=balance], addresses[@name=addresses], suggested[@name=suggested], gas[@name=gas], price[@name=price], transaction[@name=transaction], id[@name=id], after[@name=after], broadcast[@name=broadcast], sc[@name=sc], erc20[@name=erc20], decimals[@name=decimals], symbol[@name=symbol], total[@name=total], supply[@name=supply], erc721[@name=erc721], owner[@name=owner], asset[@name=asset], path[@name=path], download[@name=download], extract[@name=extract], file[@name=file], content[@name=content], verbatim[@name=verbatim], store[@name=store], list[@name=list], directory[@name=directory], exists[@name=exists], does[@name=does], not[@name=not], exist[@name=exist], git[@name=git], repository[@name=repository], clone[@name=clone], commit[@name=commit], create[@name=create], new[@name=new], object[@name=object], manipulate[@name=manipulate], get[@name=get], value[@name=value], set[@name=set], sources[@name=sources], merge[@name=merge], paths[@name=paths], omit[@name=omit], array[@name=array], values[@name=values], concat[@name=concat], compact[@name=compact], properties[@name=properties], pick[@name=pick], delete[@name=delete], do[@name=do], headers[@name=headers], sequential[@name=sequential], parallel[@name=parallel], same[@name=same], post[@name=post], put[@name=put], patch[@name=patch], json_data[@name=json_data], json_schema[@name=json_schema], validate[@name=validate], json[@name=json], request[@name=request], server_data[@name=server_data], generate[@name=generate], access[@name=access], token[@name=token], authorization[@name=authorization], code[@name=code], client[@name=client], expires_in[@name=expires_in], uri[@name=uri], details[@name=details], from[@name=from], request_uri[@name=request_uri], data[@name=data], add[@name=add], redirect_uri[@name=redirect_uri], start[@name=start], pb[@name=pb], capacitor[@name=capacitor], my_credentials[@name=my_credentials], login[@name=login], refresh[@name=refresh], email[@name=email], ask[@name=ask], password[@name=password], reset[@name=reset], list_parameters[@name=list_parameters], some[@name=some], records[@name=records], show_parameters[@name=show_parameters], one[@name=one], create_parameters[@name=create_parameters], record_parameters[@name=record_parameters], update_parameters[@name=update_parameters], update[@name=update], delete_parameters[@name=delete_parameters], url[@name=url], send_parameters[@name=send_parameters], text[@name=text], qr[@name=qr], dictionary[@name=dictionary], serialized[@name=serialized], canonical[@name=canonical], rdf[@name=rdf], key[@name=key], write[@name=write], redis[@name=redis], command[@name=command], shell[@name=shell], fetch[@name=fetch], local[@name=local], timestamp[@name=timestamp], milliseconds[@name=milliseconds], seconds[@name=seconds], jwk[@name=jwk], holder[@name=holder], fields[@name=fields], vc[@name=vc], sd[@name=sd], jwt[@name=jwt], verifier_url[@name=verifier_url], issued_vc[@name=issued_vc], disclosed[@name=disclosed], present[@name=present], issuer[@name=issuer], p256[@name=p256], sk[@name=sk], public[@name=public], pretty[@name=pretty], script[@name=script], keys[@name=keys], zencode[@name=zencode], extra[@name=extra], conf[@name=conf] } @tokens { diff --git a/grammar/src/tokens.js b/grammar/src/tokens.js index f418327c..d850b67a 100644 --- a/grammar/src/tokens.js +++ b/grammar/src/tokens.js @@ -5,110 +5,87 @@ import { ExternalTokenizer } from '@lezer/lr'; import { eof, + given, + then, + I, + prepare, + compute, + open, + connect, + to, + send, + and, + where, + is, + _with, + output, + secret, + into, + scenario, + rule, version, unknown, ignore, + when, + foreach, + endforeach, + _if, + endif, + that, have, a, my, - that, + the, valid, - inside, named, + _in, + inside, am, + name, known, as, - connect, - open, - to, - and, - send, + verify, + print, statement, + execute, + sql, parameters, + parametrized, record, table, - variable, - name, - address, - transaction_id, - addresses, - transaction, - sc, - path, - content, - commit, - paths, - array, - values, - value, - sources, - properties, - headers, - object, - json_data, - json_schema, - request, - uri, - server_data, - client, - expires_in, - token, - request_uri, - data, - my_credentials, - email, - list_parameters, - show_parameters, - create_parameters, - record_parameters, - update_parameters, - delete_parameters, - send_parameters, - url, - text, - command, - jwk, - holder, - fields, - verifier_url, - issued_vc, - disclosed, - nonce, - sk, - script, - key, - keys, - extra, - conf, - execute, - sql, - _with, read, - file, - the, of, - database, + variable, save, + database, + address, ethereum, + nonce, + transaction_id, bytes, balance, + addresses, suggested, gas, price, + transaction, id, after, broadcast, + sc, erc20, decimals, symbol, total, supply, erc721, - _in, owner, asset, + path, download, extract, + file, + content, verbatim, store, list, @@ -117,79 +94,114 @@ import { does, not, exist, - verify, git, repository, clone, + commit, create, _new, + object, manipulate, get, + value, set, + sources, merge, + paths, omit, + array, + values, concat, compact, + properties, pick, + _delete, _do, + headers, sequential, parallel, same, post, put, patch, + json_data, + json_schema, validate, json, + request, + server_data, generate, access, + token, authorization, code, + client, + expires_in, + uri, details, from, + request_uri, + data, add, + redirect_uri, start, pb, capacitor, + my_credentials, login, + refresh, + email, ask, password, reset, + list_parameters, some, records, + show_parameters, one, + create_parameters, + record_parameters, + update_parameters, update, + delete_parameters, + url, + send_parameters, + text, qr, + dictionary, + serialized, + canonical, + rdf, + key, write, - into, redis, - _delete, + command, shell, fetch, local, timestamp, milliseconds, seconds, - present, + jwk, + holder, + fields, vc, sd, jwt, + verifier_url, + issued_vc, + disclosed, + present, + issuer, p256, + sk, _public, pretty, - print, + script, + keys, zencode, - output, - is, - given, - then, - when, - rule, - scenario, - _if, - endif, - foreach, - endforeach, - I, + extra, + conf, } from './syntax.grammar.terms'; export const Eoftoken = new ExternalTokenizer( @@ -200,111 +212,89 @@ export const Eoftoken = new ExternalTokenizer( }, { contextual: true, fallback: true }, ); + const keywordMap = { + given, + then, + I, + prepare, + compute, + open, + connect, + to, + send, + and, + where, + is, + with: _with, + output, + secret, + into, + scenario, + rule, version, unknown, ignore, + when, + foreach, + endforeach, + if: _if, + endif, + that, have, a, my, - that, + the, valid, - inside, named, + in: _in, + inside, am, + name, known, as, - connect, - to, - open, - and, - send, + verify, + print, statement, + execute, + sql, parameters, + parametrized, record, table, - variable, - name, - address, - transaction_id, - addresses, - transaction, - sc, - path, - content, - commit, - paths, - array, - values, - value, - sources, - properties, - headers, - object, - json_data, - json_schema, - request, - uri, - server_data, - client, - expires_in, - token, - request_uri, - data, - my_credentials, - email, - list_parameters, - show_parameters, - create_parameters, - record_parameters, - update_parameters, - delete_parameters, - send_parameters, - url, - text, - command, - jwk, - holder, - fields, - verifier_url, - issued_vc, - disclosed, - nonce, - sk, - script, - key, - keys, - extra, - conf, - execute, - sql, - with: _with, read, - file, - the, of, - database, + variable, save, + database, + address, ethereum, + nonce, + transaction_id, bytes, balance, + addresses, suggested, gas, price, + transaction, id, after, broadcast, + sc, erc20, decimals, symbol, total, supply, erc721, - in: _in, owner, asset, + path, download, extract, + file, + content, verbatim, store, list, @@ -313,79 +303,114 @@ const keywordMap = { does, not, exist, - verify, git, repository, clone, + commit, create, new: _new, + object, manipulate, get, + value, set, + sources, merge, + paths, omit, + array, + values, concat, compact, + properties, pick, + delete: _delete, do: _do, + headers, sequential, parallel, same, post, put, patch, + json_data, + json_schema, validate, json, + request, + server_data, generate, access, + token, authorization, code, + client, + expires_in, + uri, details, from, + request_uri, + data, add, + redirect_uri, start, pb, capacitor, + my_credentials, login, + refresh, + email, ask, password, reset, + list_parameters, some, records, + show_parameters, one, + create_parameters, + record_parameters, + update_parameters, update, + delete_parameters, + url, + send_parameters, + text, qr, + dictionary, + serialized, + canonical, + rdf, + key, write, - into, redis, - delete: _delete, + command, shell, fetch, local, timestamp, milliseconds, seconds, - present, + jwk, + holder, + fields, vc, sd, jwt, + verifier_url, + issued_vc, + disclosed, + present, + issuer, + p256, + sk, public: _public, pretty, - print, + script, + keys, zencode, - output, - is, - given, - then, - when, - rule, - scenario, - if: _if, - endif, - foreach, - endforeach, - I, - p256, + extra, + conf, }; export function keywords(name) { diff --git a/grammar/test/cases.txt b/grammar/test/cases.txt index 3e0b94ad..f572ed9f 100644 --- a/grammar/test/cases.txt +++ b/grammar/test/cases.txt @@ -1,9 +1,11 @@ # Single statement -Given I fetch the local timestamp in seconds +Prepare secret 'secrets': read file content where path is 'secrets_path' ==> -Statement(SlangroomStatement(GivenStatement(given,I,TimestampStatement(TimestampAction(fetch,the,local,timestamp,in,seconds))))) +Statement( + SlangroomStatement(PcStatement(prepare,secret,StringLiteral,PcFsStatement(Action(read,file,content),where,path,is,StringLiteral))) +) #Db example @@ -16,9 +18,12 @@ Then print the 'result' ==> -Statement(RuleStatement(rule,GenericRule(Keywords(unknown),Keywords(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))) +Statement( + RuleStatement(rule,GenericRule(Keywords(unknown),Keywords(ignore))), + SlangroomStatement(GtStatement(given,I,GtDbStatement(connect,to,StringLiteral,and,send,record,StringLiteral,and,send,table,StringLiteral,and,Action(read,the,record,of,the,table),SaveAction(and,output,into,StringLiteral)))), + SlangroomStatement(GivenHaveStatement(given,I,have,a,StringLiteral,named,StringLiteral)), + SlangroomStatement(ThenPrint(then,print,Keywords(the),StringLiteral)) +) #Ethereum complex example @@ -26,7 +31,7 @@ Rule unknown ignore Scenario 'ethereum': Store an object on eth Given I connect to 'ethereum' and send address 'address' and read the ethereum nonce and output into 'ethereum_nonce' -Given I connect to 'ethereum' and read the suggested gas price and output into 'gas_price' +Given I connect to 'ethereum' and read the ethereum suggested gas price and output into 'gas_price' # from slangroom Given I have a 'ethereum nonce' @@ -51,15 +56,27 @@ Then I connect to 'ethereum' and send transaction 'signed_ethereum_transaction' ==> -Statement(RuleStatement(rule,GenericRule(Keywords(unknown),Keywords(ignore))),ScenarioStatement(scenario,ScenarioType(StringLiteral),ScenarioComment(Keywords(store),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)), +Statement( + RuleStatement(rule,GenericRule(Keywords(unknown),Keywords(ignore))), + ScenarioStatement(scenario,ScenarioType(StringLiteral),ScenarioComment(Keywords(store),Identifier,Keywords(object),Identifier,Identifier)), + SlangroomStatement(GtStatement(given,I,GtEthereumStatement(connect,to,StringLiteral,and,send,address,StringLiteral,and,Action(read,the,ethereum,nonce),SaveAction(and,output,into,StringLiteral)))), + SlangroomStatement(GtStatement(given,I,GtEthereumStatement(connect,to,StringLiteral,and,Action(read,the,ethereum,suggested,gas,price),SaveAction(and,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))))) + SlangroomStatement(WhenStatement(when,I,Keywords(create),Keywords(the),Identifier,Keywords(ethereum),Keywords(transaction),Identifier,Identifier,StringLiteral)), + SlangroomStatement(ThenPrint(then,print,Keywords(the),StringLiteral)), + SlangroomStatement(GtStatement(then,I,GtEthereumStatement(connect,to,StringLiteral,and,send,transaction,StringLiteral,and,Action(read,the,ethereum,transaction,id,after,broadcast),SaveAction(and,output,into,StringLiteral)))) +) #Fs example @@ -71,10 +88,13 @@ Then print the 'file_path_1' ==> -Statement(RuleStatement(rule,GenericRule(Keywords(unknown),Keywords(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)))))), +Statement( + RuleStatement(rule,GenericRule(Keywords(unknown),Keywords(ignore))), + SlangroomStatement(GtStatement(given,I,GtFsStatement(send,path,StringLiteral,and,Action(verify,file,exists)))), + SlangroomStatement(GtStatement(given,I,GtFsStatement(send,path,StringLiteral,and,Action(verify,file,does,not,exist)))), SlangroomStatement(GivenHaveStatement(given,I,have,a,StringLiteral,named,StringLiteral)), - SlangroomStatement(ThenPrint(then,print,Keywords(the),StringLiteral))) + SlangroomStatement(ThenPrint(then,print,Keywords(the),StringLiteral)) +) #Git example @@ -87,10 +107,12 @@ Then print the data ==> -Statement(RuleStatement(rule,GenericRule(Keywords(unknown),Keywords(ignore))), - SlangroomStatement(GivenStatement(given,I,GitStatement(GitOpenOrConnectAction(connect,to,StringLiteral,and,GitSend(send,path,StringLiteral,and,GitAction(clone,repository)))))), +Statement( + RuleStatement(rule,GenericRule(Keywords(unknown),Keywords(ignore))), + SlangroomStatement(GtStatement(given,I,GtGitStatement(connect,to,StringLiteral,and,send,path,StringLiteral,and,Action(clone,repository)))), SlangroomStatement(GivenHaveStatement(given,I,have,a,StringLiteral,named,StringLiteral)), - SlangroomStatement(ThenPrint(then,print,Keywords(the),Keywords(data)))) + SlangroomStatement(ThenPrint(then,print,Keywords(the),Keywords(data))) +) #Helpers example @@ -104,10 +126,12 @@ Then print the data ==> -Statement(RuleStatement(rule,GenericRule(Keywords(unknown),Keywords(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)))), +Statement( + RuleStatement(rule,GenericRule(Keywords(unknown),Keywords(ignore))), + SlangroomStatement(GtStatement(given,I,GtHelpersStatement(send,array,StringLiteral,and,send,values,StringLiteral,and,Action(manipulate,and,concat),SaveAction(and,output,into,StringLiteral)))), SlangroomStatement(GivenHaveStatement(given,I,have,a,StringLiteral,named,StringLiteral)), - SlangroomStatement(ThenPrint(then,print,Keywords(the),Keywords(data)))) + SlangroomStatement(ThenPrint(then,print,Keywords(the),Keywords(data))) +) #Http example @@ -119,11 +143,12 @@ Then print the 'result' ==> -Statement(RuleStatement(rule,GenericRule(Keywords(unknown),Keywords(ignore))), - SlangroomStatement(GivenStatement(given,I,HttpStatement(HttpConnectAction(connect,to,StringLiteral,and,HttpAction(do,get)),and,SaveAction(output,into,StringLiteral)))), +Statement( + RuleStatement(rule,GenericRule(Keywords(unknown),Keywords(ignore))), + SlangroomStatement(GtStatement(given,I,GtHttpStatement(connect,to,StringLiteral,and,Action(do,get),SaveAction(and,output,into,StringLiteral)))), SlangroomStatement(GivenHaveStatement(given,I,have,a,StringLiteral,named,StringLiteral)), - SlangroomStatement(ThenPrint(then,print,Keywords(the),StringLiteral))) - + SlangroomStatement(ThenPrint(then,print,Keywords(the),StringLiteral)) +) #Json-schema example @@ -136,10 +161,12 @@ Then print the 'result' ==> -Statement(RuleStatement(rule,GenericRule(Keywords(unknown),Keywords(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)))), +Statement( + RuleStatement(rule,GenericRule(Keywords(unknown),Keywords(ignore))), + SlangroomStatement(GtStatement(given,I,GtJsonSchemaStatement(send,json_data,StringLiteral,and,send,json_schema,StringLiteral,and,Action(validate,json),SaveAction(and,output,into,StringLiteral)))), SlangroomStatement(GivenHaveStatement(given,I,have,a,StringLiteral,named,StringLiteral)), - SlangroomStatement(ThenPrint(then,print,Keywords(the),StringLiteral))) + SlangroomStatement(ThenPrint(then,print,Keywords(the),StringLiteral)) +) #Oauth example @@ -158,13 +185,16 @@ Then I send request 'request' and send server_data 'server_data' and generate ac ==> -Statement(RuleStatement(rule,GenericRule(Keywords(unknown),Keywords(ignore))),ScenarioStatement(scenario,ScenarioType(StringLiteral),ScenarioComment(Keywords(url),Identifier)), +Statement( + RuleStatement(rule,GenericRule(Keywords(unknown),Keywords(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))))) + SlangroomStatement(GtStatement(then,I,GtOAuthStatement(send,request,StringLiteral,and,send,server_data,StringLiteral,and,Action(generate,access,token),SaveAction(and,output,into,StringLiteral)))) +) #Pocketbase example @@ -180,12 +210,14 @@ Then print the 'result' ==> -Statement(RuleStatement(rule,GenericRule(Keywords(unknown),Keywords(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)))), +Statement( + RuleStatement(rule,GenericRule(Keywords(unknown),Keywords(ignore))), + SlangroomStatement(GtStatement(given,I,GtPocketbaseStatement(connect,to,StringLiteral,and,Action(start,pb,client)))), + SlangroomStatement(GtStatement(given,I,GtPocketbaseStatement(send,my_credentials,StringLiteral,and,Action(login)))), + SlangroomStatement(GtStatement(given,I,GtPocketbaseStatement(send,create_parameters,StringLiteral,and,send,record_parameters,StringLiteral,and,Action(create,record),SaveAction(and,output,into,StringLiteral)))), SlangroomStatement(GivenHaveStatement(given,I,have,a,StringLiteral,named,StringLiteral)), - SlangroomStatement(ThenPrint(then,print,Keywords(the),StringLiteral))) + SlangroomStatement(ThenPrint(then,print,Keywords(the),StringLiteral)) +) #Qrcode example @@ -198,10 +230,12 @@ Then print the 'result' ==> -Statement(RuleStatement(rule,GenericRule(Keywords(unknown),Keywords(ignore))), - SlangroomStatement(GivenStatement(given,I,QrCodeStatement(QrCodeSend(send,text,StringLiteral,and,QrCodeAction(create,qr,code)),and,SaveAction(output,into,StringLiteral)))), +Statement( + RuleStatement(rule,GenericRule(Keywords(unknown),Keywords(ignore))), + SlangroomStatement(GtStatement(given,I,GtQrCodeStatement(send,text,StringLiteral,and,Action(create,qr,code),SaveAction(and,output,into,StringLiteral)))), SlangroomStatement(GivenHaveStatement(given,I,have,a,StringLiteral,named,StringLiteral)), - SlangroomStatement(ThenPrint(then,print,Keywords(the),StringLiteral))) + SlangroomStatement(ThenPrint(then,print,Keywords(the),StringLiteral)) +) #Redis example @@ -214,10 +248,12 @@ Then print the 'result' ==> -Statement(RuleStatement(rule,GenericRule(Keywords(unknown),Keywords(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)))), +Statement( + RuleStatement(rule,GenericRule(Keywords(unknown),Keywords(ignore))), + SlangroomStatement(GtStatement(given,I,GtRedisStatement(connect,to,StringLiteral,and,send,key,StringLiteral,and,Action(delete,key,from,redis),SaveAction(and,output,into,StringLiteral)))), SlangroomStatement(GivenHaveStatement(given,I,have,a,StringLiteral,named,StringLiteral)), - SlangroomStatement(ThenPrint(then,print,Keywords(the),StringLiteral))) + SlangroomStatement(ThenPrint(then,print,Keywords(the),StringLiteral)) +) #Shell example @@ -230,10 +266,12 @@ Then print the 'result' ==> -Statement(RuleStatement(rule,GenericRule(Keywords(unknown),Keywords(ignore))), - SlangroomStatement(GivenStatement(given,I,ShellStatement(ShellSend(send,command,StringLiteral,and,ShellAction(execute,in,shell)),and,SaveAction(output,into,StringLiteral)))), +Statement( + RuleStatement(rule,GenericRule(Keywords(unknown),Keywords(ignore))), + SlangroomStatement(GtStatement(given,I,GtShellStatement(send,command,StringLiteral,and,Action(execute,in,shell),SaveAction(and,output,into,StringLiteral)))), SlangroomStatement(GivenHaveStatement(given,I,have,a,StringLiteral,named,StringLiteral)), - SlangroomStatement(ThenPrint(then,print,Keywords(the),StringLiteral))) + SlangroomStatement(ThenPrint(then,print,Keywords(the),StringLiteral)) +) #Timestamp example @@ -249,13 +287,15 @@ Then print the 'result_in_milliseconds' ==> -Statement(RuleStatement(rule,GenericRule(Keywords(unknown),Keywords(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)))), +Statement( + RuleStatement(rule,GenericRule(Keywords(unknown),Keywords(ignore))), + SlangroomStatement(GtStatement(given,I,GtTimestampStatement(Action(fetch,the,local,timestamp,in,seconds),SaveAction(and,output,into,StringLiteral)))), + SlangroomStatement(GtStatement(given,I,GtTimestampStatement(Action(fetch,the,local,timestamp,in,milliseconds),SaveAction(and,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))) + SlangroomStatement(ThenPrint(then,print,Keywords(the),StringLiteral)) +) #Zencode example @@ -268,10 +308,12 @@ Then print the 'result' ==> -Statement(RuleStatement(rule,GenericRule(Keywords(unknown),Keywords(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)))), +Statement( + RuleStatement(rule,GenericRule(Keywords(unknown),Keywords(ignore))), + SlangroomStatement(GtStatement(given,I,GtZencodeStatement(send,keys,StringLiteral,and,send,data,StringLiteral,and,send,script,StringLiteral,and,Action(execute,zencode),SaveAction(and,output,into,StringLiteral)))), SlangroomStatement(GivenHaveStatement(given,I,have,a,StringLiteral,named,StringLiteral)), - SlangroomStatement(ThenPrint(then,print,Keywords(the),StringLiteral))) + SlangroomStatement(ThenPrint(then,print,Keywords(the),StringLiteral)) +) #Test from Didroom 1 @@ -320,22 +362,28 @@ Then I send request 'request' and send server_data 'server' and verify request p ==> -Statement(ScenarioStatement(scenario,ScenarioType(StringLiteral)),ScenarioStatement(scenario,ScenarioType(StringLiteral),ScenarioComment(Keywords(create),Keywords(jwk))),RuleStatement(rule,GenericRule(Keywords(unknown),Keywords(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, +Statement( + ScenarioStatement(scenario,ScenarioType(StringLiteral)), + ScenarioStatement(scenario,ScenarioType(StringLiteral),ScenarioComment(Keywords(create),Keywords(jwk))), + RuleStatement(rule,GenericRule(Keywords(unknown),Keywords(ignore))), + SlangroomStatement(GtStatement(given,I,GtFsStatement(send,path,StringLiteral,and,Action(read,file,content),SaveAction(and,output,into,StringLiteral)))), + SlangroomStatement(GtStatement(given,I,GtHelpersStatement(send,object,StringLiteral,and,send,path,StringLiteral,and,Action(manipulate,and,get),SaveAction(and,output,into,StringLiteral)))), + SlangroomStatement(GtStatement(given,I,GtHelpersStatement(send,object,StringLiteral,and,send,path,StringLiteral,and,Action(manipulate,and,get),SaveAction(and,output,into,StringLiteral)))), + SlangroomStatement(GtStatement(given,I,GtFsStatement(send,path,StringLiteral,and,Action(read,file,content),SaveAction(and,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)), + 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,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)), @@ -345,7 +393,8 @@ Statement(ScenarioStatement(scenario,ScenarioType(StringLiteral)),ScenarioStatem 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))))))) + SlangroomStatement(GtStatement(then,I,GtOAuthStatement(send,request,StringLiteral,and,send,server_data,StringLiteral,and,Action(verify,request,parameters)))) +) #Test from Didroom 2 @@ -399,39 +448,48 @@ Then print the 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)))) +Statement( + Comment, + SlangroomStatement(GtStatement(given,I,GtFsStatement(send,path,StringLiteral,and,Action(read,file,content),SaveAction(and,output,secret,into,StringLiteral)))), + SlangroomStatement(GtStatement(given,I,GtHelpersStatement(send,object,StringLiteral,and,send,path,StringLiteral,and,Action(manipulate,and,get),SaveAction(and,output,into,StringLiteral)))), + SlangroomStatement(GtStatement(given,I,GtHelpersStatement(send,object,StringLiteral,and,send,path,StringLiteral,and,Action(manipulate,and,get),SaveAction(and,output,secret,into,StringLiteral)))), + Comment, + SlangroomStatement(GtStatement(given,I,GtFsStatement(send,path,StringLiteral,and,Action(read,file,content),SaveAction(and,output,into,StringLiteral)))), + Comment, + SlangroomStatement(GtStatement(given,I,GtHelpersStatement(send,object,StringLiteral,and,send,path,StringLiteral,and,send,value,StringLiteral,and,Action(manipulate,and,set)))), + SlangroomStatement(GtStatement(given,I,GtHelpersStatement(send,object,StringLiteral,and,send,path,StringLiteral,and,send,value,StringLiteral,and,Action(manipulate,and,set)))), + SlangroomStatement(GtStatement(given,I,GtHelpersStatement(send,object,StringLiteral,and,send,path,StringLiteral,and,send,value,StringLiteral,and,Action(manipulate,and,set)))), + SlangroomStatement(GtStatement(given,I,GtFsStatement(send,path,StringLiteral,and,Action(read,verbatim,file,content),SaveAction(and,output,into,StringLiteral)))), + SlangroomStatement(GtStatement(given,I,GtZencodeStatement(send,keys,StringLiteral,and,send,data,StringLiteral,and,send,script,StringLiteral,and,Action(execute,zencode),SaveAction(and,output,into,StringLiteral)))), + Comment, + SlangroomStatement(GtStatement(given,I,GtHelpersStatement(send,object,StringLiteral,and,send,path,StringLiteral,and,Action(manipulate,and,get),SaveAction(and,output,into,StringLiteral)))), + SlangroomStatement(GtStatement(given,I,GtHttpStatement(connect,to,StringLiteral,and,Action(do,get),SaveAction(and,output,into,StringLiteral)))), + SlangroomStatement(GtStatement(given,I,GtHelpersStatement(send,object,StringLiteral,and,send,path,StringLiteral,and,Action(manipulate,and,get),SaveAction(and,output,into,StringLiteral)))), + SlangroomStatement(GtStatement(given,I,GtFsStatement(send,path,StringLiteral,and,Action(read,verbatim,file,content),SaveAction(and,output,into,StringLiteral)))), + SlangroomStatement(GtStatement(given,I,GtZencodeStatement(send,keys,StringLiteral,and,send,data,StringLiteral,and,send,script,StringLiteral,and,Action(execute,zencode),SaveAction(and,output,into,StringLiteral)))), + Comment, + SlangroomStatement(GtStatement(given,I,GtHelpersStatement(send,object,StringLiteral,and,send,path,StringLiteral,and,Action(manipulate,and,get),SaveAction(and,output,into,StringLiteral)))), + SlangroomStatement(GtStatement(given,I,GtHttpStatement(connect,to,StringLiteral,and,Action(do,get),SaveAction(and,output,into,StringLiteral)))), + SlangroomStatement(GtStatement(given,I,GtFsStatement(send,path,StringLiteral,and,Action(read,verbatim,file,content),SaveAction(and,output,into,StringLiteral)))), + SlangroomStatement(GtStatement(given,I,GtZencodeStatement(send,keys,StringLiteral,and,send,data,StringLiteral,and,send,script,StringLiteral,and,Action(execute,zencode),SaveAction(and,output,into,StringLiteral)))), + Comment, + SlangroomStatement(GtStatement(given,I,GtHelpersStatement(send,object,StringLiteral,and,send,path,StringLiteral,and,Action(manipulate,and,get),SaveAction(and,output,into,StringLiteral)))), + SlangroomStatement(GtStatement(given,I,GtHelpersStatement(send,object,StringLiteral,and,send,path,StringLiteral,and,Action(manipulate,and,get),SaveAction(and,output,into,StringLiteral)))), + SlangroomStatement(GtStatement(given,I,GtHelpersStatement(send,object,StringLiteral,and,send,path,StringLiteral,and,send,value,StringLiteral,and,Action(manipulate,and,set)))), + SlangroomStatement(GtStatement(given,I,GtHelpersStatement(send,object,StringLiteral,and,send,path,StringLiteral,and,send,value,StringLiteral,and,Action(manipulate,and,set)))), + SlangroomStatement(GtStatement(given,I,GtHelpersStatement(send,object,StringLiteral,and,send,path,StringLiteral,and,send,value,StringLiteral,and,Action(manipulate,and,set)))), + SlangroomStatement(GtStatement(given,I,GtHelpersStatement(send,object,StringLiteral,and,send,path,StringLiteral,and,send,value,StringLiteral,and,Action(manipulate,and,set)))), + SlangroomStatement(GtStatement(given,I,GtHelpersStatement(send,object,StringLiteral,and,send,path,StringLiteral,and,send,value,StringLiteral,and,Action(manipulate,and,set)))), + SlangroomStatement(GtStatement(given,I,GtHelpersStatement(send,object,StringLiteral,and,send,path,StringLiteral,and,send,value,StringLiteral,and,Action(manipulate,and,set)))), + SlangroomStatement(GtStatement(given,I,GtFsStatement(send,path,StringLiteral,and,Action(read,verbatim,file,content),SaveAction(and,output,into,StringLiteral)))), + SlangroomStatement(GtStatement(given,I,GtZencodeStatement(send,keys,StringLiteral,and,send,data,StringLiteral,and,send,script,StringLiteral,and,Action(execute,zencode),SaveAction(and,output,into,StringLiteral)))), + Comment, + SlangroomStatement(GtStatement(given,I,GtHelpersStatement(send,object,StringLiteral,and,send,path,StringLiteral,and,Action(manipulate,and,get),SaveAction(and,output,into,StringLiteral)))), + SlangroomStatement(GtStatement(given,I,GtHelpersStatement(send,object,StringLiteral,and,send,path,StringLiteral,and,Action(manipulate,and,get),SaveAction(and,output,into,StringLiteral)))), + SlangroomStatement(GtStatement(given,I,GtHttpStatement(connect,to,StringLiteral,and,send,object,StringLiteral,and,Action(do,post),SaveAction(and,output,into,StringLiteral)))), + SlangroomStatement(GivenHaveStatement(given,I,have,a,StringLiteral,named,StringLiteral)), + SlangroomStatement(ThenPrint(then,print,Keywords(the),Keywords(data))) +) #Test from Didroom 3 @@ -508,59 +566,66 @@ 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)))), - 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)), +Statement( + SlangroomStatement(GtStatement(given,I,GtFsStatement(send,path,StringLiteral,and,Action(read,file,content),SaveAction(and,output,into,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, + 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,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,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,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))))) + 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(GtStatement(then,I,GtOAuthStatement(send,request,StringLiteral,and,send,client,StringLiteral,and,send,server_data,StringLiteral,and,send,expires_in,StringLiteral,and,Action(generate,request,uri),SaveAction(and,output,into,StringLiteral)))), + SlangroomStatement(GtStatement(then,I,GtHelpersStatement(Action(manipulate,and,delete),SaveAction(and,output,into,StringLiteral)))), + SlangroomStatement(GtStatement(then,I,GtHelpersStatement(Action(manipulate,and,delete),SaveAction(and,output,into,StringLiteral)))), + SlangroomStatement(GtStatement(then,I,GtHelpersStatement(Action(manipulate,and,delete),SaveAction(and,output,into,StringLiteral)))), + SlangroomStatement(GtStatement(then,I,GtHelpersStatement(send,object,StringLiteral,and,send,path,StringLiteral,and,Action(manipulate,and,get),SaveAction(and,output,into,StringLiteral)))), + SlangroomStatement(GtStatement(then,I,GtHelpersStatement(send,object,StringLiteral,and,send,path,StringLiteral,and,Action(manipulate,and,get),SaveAction(and,output,into,StringLiteral)))), + SlangroomStatement(GtStatement(then,I,GtHelpersStatement(Action(manipulate,and,delete),SaveAction(and,output,into,StringLiteral)))) +) #Test from Didroom 4 @@ -677,56 +742,75 @@ Then I manipulate and delete and output into 'secrets' ==> -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))))) +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(GtStatement(given,I,GtShellStatement(send,command,StringLiteral,and,Action(execute,in,shell),SaveAction(and,output,into,StringLiteral)))), + SlangroomStatement(GtStatement(given,I,GtFsStatement(send,path,StringLiteral,and,Action(verify,file,does,not,exist)))), + Comment, + SlangroomStatement(GtStatement(given,I,GtFsStatement(send,path,StringLiteral,and,Action(read,verbatim,file,content),SaveAction(and,output,into,StringLiteral)))), + SlangroomStatement(GtStatement(given,I,GtZencodeStatement(send,keys,StringLiteral,and,send,data,StringLiteral,and,send,script,StringLiteral,and,Action(execute,zencode),SaveAction(and,output,secret,into,StringLiteral)))), + Comment, + SlangroomStatement(GtStatement(given,I,GtHelpersStatement(send,object,StringLiteral,and,send,path,StringLiteral,and,Action(manipulate,and,get),SaveAction(and,output,into,StringLiteral)))), + SlangroomStatement(GtStatement(given,I,GtHelpersStatement(send,object,StringLiteral,and,send,path,StringLiteral,and,Action(manipulate,and,get),SaveAction(and,output,secret,into,StringLiteral)))), + Comment, + SlangroomStatement(GtStatement(given,I,GtFsStatement(send,path,StringLiteral,and,Action(read,file,content),SaveAction(and,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),Keywords(issuer),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(GtStatement(then,I,GtHelpersStatement(send,object,StringLiteral,and,send,path,StringLiteral,and,send,value,StringLiteral,and,Action(manipulate,and,set)))), + SlangroomStatement(GtStatement(then,I,GtHelpersStatement(send,object,StringLiteral,and,send,path,StringLiteral,and,send,value,StringLiteral,and,Action(manipulate,and,set)))), + SlangroomStatement(GtStatement(then,I,GtHelpersStatement(send,object,StringLiteral,and,send,path,StringLiteral,and,send,value,StringLiteral,and,Action(manipulate,and,set)))), + SlangroomStatement(GtStatement(then,I,GtHelpersStatement(send,object,StringLiteral,and,send,path,StringLiteral,and,send,value,StringLiteral,and,Action(manipulate,and,set)))), + SlangroomStatement(GtStatement(then,I,GtHelpersStatement(send,object,StringLiteral,and,send,path,StringLiteral,and,send,value,StringLiteral,and,Action(manipulate,and,set)))), + SlangroomStatement(GtStatement(then,I,GtHelpersStatement(send,object,StringLiteral,and,send,path,StringLiteral,and,send,value,StringLiteral,and,Action(manipulate,and,set)))), + SlangroomStatement(GtStatement(then,I,GtHelpersStatement(send,object,StringLiteral,and,send,path,StringLiteral,and,send,value,StringLiteral,and,Action(manipulate,and,set)))), + SlangroomStatement(GtStatement(then,I,GtHelpersStatement(send,object,StringLiteral,and,send,path,StringLiteral,and,send,value,StringLiteral,and,Action(manipulate,and,set)))), + SlangroomStatement(GtStatement(then,I,GtHelpersStatement(send,object,StringLiteral,and,send,path,StringLiteral,and,send,value,StringLiteral,and,Action(manipulate,and,set)))), + SlangroomStatement(GtStatement(then,I,GtHelpersStatement(send,object,StringLiteral,and,send,path,StringLiteral,and,send,value,StringLiteral,and,Action(manipulate,and,set)))), + SlangroomStatement(GtStatement(then,I,GtHelpersStatement(send,object,StringLiteral,and,send,path,StringLiteral,and,send,value,StringLiteral,and,Action(manipulate,and,set)))), + Comment, + SlangroomStatement(GtStatement(then,I,GtFsStatement(send,path,StringLiteral,and,Action(read,verbatim,file,content),SaveAction(and,output,into,StringLiteral)))), + SlangroomStatement(GtStatement(then,I,GtZencodeStatement(send,keys,StringLiteral,and,send,data,StringLiteral,and,send,script,StringLiteral,and,Action(execute,zencode),SaveAction(and,output,into,StringLiteral)))), + SlangroomStatement(GtStatement(then,I,GtHelpersStatement(Action(manipulate,and,delete),SaveAction(and,output,into,StringLiteral)))), + SlangroomStatement(GtStatement(then,I,GtHelpersStatement(Action(manipulate,and,delete),SaveAction(and,output,into,StringLiteral)))), + Comment, + SlangroomStatement(GtStatement(then,I,GtHttpStatement(connect,to,StringLiteral,and,send,object,StringLiteral,and,Action(do,post),SaveAction(and,output,into,StringLiteral)))), + SlangroomStatement(GtStatement(then,I,GtHelpersStatement(Action(manipulate,and,delete),SaveAction(and,output,into,StringLiteral)))), + Comment, + SlangroomStatement(GtStatement(then,I,GtHelpersStatement(send,object,StringLiteral,and,send,path,StringLiteral,and,Action(manipulate,and,get),SaveAction(and,output,into,StringLiteral)))), + SlangroomStatement(GtStatement(then,I,GtHttpStatement(connect,to,StringLiteral,and,send,object,StringLiteral,and,Action(do,post),SaveAction(and,output,into,StringLiteral)))), + SlangroomStatement(GtStatement(then,I,GtHelpersStatement(Action(manipulate,and,delete),SaveAction(and,output,into,StringLiteral)))), + SlangroomStatement(GtStatement(then,I,GtHelpersStatement(Action(manipulate,and,delete),SaveAction(and,output,into,StringLiteral)))), + Comment, + SlangroomStatement(GtStatement(then,I,GtFsStatement(send,path,StringLiteral,and,Action(read,file,content),SaveAction(and,output,into,StringLiteral)))), + SlangroomStatement(GtStatement(then,I,GtFsStatement(send,path,StringLiteral,and,Action(read,verbatim,file,content),SaveAction(and,output,into,StringLiteral)))), + SlangroomStatement(GtStatement(then,I,GtZencodeStatement(send,keys,StringLiteral,and,send,data,StringLiteral,and,send,script,StringLiteral,and,Action(execute,zencode),SaveAction(and,output,into,StringLiteral)))), + SlangroomStatement(GtStatement(then,I,GtHelpersStatement(send,object,StringLiteral,and,send,path,StringLiteral,and,Action(manipulate,and,get),SaveAction(and,output,into,StringLiteral)))), + SlangroomStatement(GtStatement(then,I,GtHelpersStatement(send,object,StringLiteral,and,send,path,StringLiteral,and,send,value,StringLiteral,and,Action(manipulate,and,set)))), + SlangroomStatement(GtStatement(then,I,GtHelpersStatement(send,object,StringLiteral,and,send,path,StringLiteral,and,send,value,StringLiteral,and,Action(manipulate,and,set)))), + SlangroomStatement(GtStatement(then,I,GtFsStatement(send,path,StringLiteral,and,send,content,StringLiteral,and,Action(store,in,file)))), + SlangroomStatement(GtStatement(then,I,GtShellStatement(send,command,StringLiteral,and,Action(execute,in,shell)))), + SlangroomStatement(GtStatement(then,I,GtFsStatement(send,path,StringLiteral,and,send,content,StringLiteral,and,Action(store,in,file)))), + SlangroomStatement(GtStatement(then,I,GtHelpersStatement(Action(manipulate,and,delete),SaveAction(and,output,into,StringLiteral)))), + SlangroomStatement(GtStatement(then,I,GtHelpersStatement(Action(manipulate,and,delete),SaveAction(and,output,into,StringLiteral)))), + SlangroomStatement(GtStatement(then,I,GtHelpersStatement(Action(manipulate,and,delete),SaveAction(and,output,into,StringLiteral)))), + SlangroomStatement(GtStatement(then,I,GtHelpersStatement(Action(manipulate,and,delete),SaveAction(and,output,into,StringLiteral)))), + SlangroomStatement(GtStatement(then,I,GtHelpersStatement(Action(manipulate,and,delete),SaveAction(and,output,into,StringLiteral)))), + SlangroomStatement(GtStatement(then,I,GtHelpersStatement(Action(manipulate,and,delete),SaveAction(and,output,into,StringLiteral)))) +) #Comment after Scenario @@ -735,7 +819,10 @@ Scenario eddsa: verify presentation ==> -Statement(ScenarioStatement(scenario,ScenarioType(Identifier),ScenarioComment(Keywords(verify),Identifier)),Comment) +Statement( + ScenarioStatement(scenario,ScenarioType(Identifier),ScenarioComment(Keywords(verify),Identifier)), + Comment +) #Foreach script @@ -759,7 +846,7 @@ Then print 'numbers' ==> Statement( - 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(GivenHaveStatement(given,I,have,a,StringLiteral,named,StringLiteral,inside,StringLiteral)), SlangroomStatement(GivenHaveStatement(given,I,have,a,StringLiteral,named,StringLiteral,inside,StringLiteral)), @@ -769,7 +856,8 @@ Statement( 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))) + SlangroomStatement(ThenPrint(then,print,StringLiteral)) +) # Case Insensitive Test @@ -815,29 +903,36 @@ THEN I SEND REQUEST 'REQUEST' AND SEND SERVER_DATA 'SERVER' AND VERIFY REQUEST P ==> -Statement(ScenarioStatement(scenario,ScenarioType(StringLiteral)),ScenarioStatement(scenario,ScenarioType(StringLiteral),ScenarioComment(Keywords(create),Keywords(jwk))),RuleStatement(rule,GenericRule(Keywords(unknown),Keywords(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, +Statement( + ScenarioStatement(scenario,ScenarioType(StringLiteral)), + ScenarioStatement(scenario,ScenarioType(StringLiteral),ScenarioComment(Keywords(create),Keywords(jwk))), + RuleStatement(rule,GenericRule(Keywords(unknown),Keywords(ignore))), + SlangroomStatement(GtStatement(given,I,GtFsStatement(send,path,StringLiteral,and,Action(read,file,content),SaveAction(and,output,into,StringLiteral)))), + SlangroomStatement(GtStatement(given,I,GtHelpersStatement(send,object,StringLiteral,and,send,path,StringLiteral,and,Action(manipulate,and,get),SaveAction(and,output,into,StringLiteral)))), + SlangroomStatement(GtStatement(given,I,GtHelpersStatement(send,object,StringLiteral,and,send,path,StringLiteral,and,Action(manipulate,and,get),SaveAction(and,output,into,StringLiteral)))), + SlangroomStatement(GtStatement(given,I,GtFsStatement(send,path,StringLiteral,and,Action(read,file,content),SaveAction(and,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,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,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))))))) + 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(GtStatement(then,I,GtOAuthStatement(send,request,StringLiteral,and,send,server_data,StringLiteral,and,Action(verify,request,parameters)))) +) diff --git a/grammar/test/test.js b/grammar/test/test.js index b3ee96dc..2409900d 100644 --- a/grammar/test/test.js +++ b/grammar/test/test.js @@ -4,6 +4,7 @@ import { SlangroomLanguage } from '../dist/index.js'; import { fileTests } from '@lezer/generator/dist/test'; +import { ExternalTokenizer, LRParser } from '@lezer/lr'; import * as fs from 'fs'; import * as path from 'path'; diff --git a/grammar/utils/package.json b/grammar/utils/package.json index 17274982..e3e37956 100644 --- a/grammar/utils/package.json +++ b/grammar/utils/package.json @@ -19,6 +19,7 @@ "@slangroom/oauth": "workspace:*", "@slangroom/pocketbase": "workspace:*", "@slangroom/qrcode": "workspace:*", + "@slangroom/rdf": "workspace:*", "@slangroom/redis": "workspace:*", "@slangroom/shell": "workspace:*", "@slangroom/timestamp": "workspace:*", diff --git a/grammar/utils/prepare_complete.mjs b/grammar/utils/prepare_complete.mjs index 1125423b..6441816a 100644 --- a/grammar/utils/prepare_complete.mjs +++ b/grammar/utils/prepare_complete.mjs @@ -18,55 +18,199 @@ import { JSONSchema } from "@slangroom/json-schema"; import { oauth } from "@slangroom/oauth"; import { pocketbase } from "@slangroom/pocketbase"; import { qrcode } from "@slangroom/qrcode"; +import { rdf } from "@slangroom/rdf"; import { redis } from "@slangroom/redis"; import { shell } from "@slangroom/shell"; import { timestamp } from "@slangroom/timestamp"; import { wallet } from "@slangroom/wallet"; import { zencode } from "@slangroom/zencode"; +const reservedWords = new Set([ + 'break', 'case', 'catch', 'class', 'const', 'continue', 'debugger', 'default', 'delete', 'do', 'else', 'export', 'extends', + 'finally', 'for', 'function', 'if', 'import', 'in', 'instanceof', 'new', 'return', 'super', 'switch', 'this', 'throw', 'try', + 'typeof', 'var', 'void', 'while', 'with', 'yield', 'enum', 'await', 'implements', 'interface', 'let', 'package', 'private', + 'protected', 'public', 'static' +]); + +function isReservedWord(word) { + if (reservedWords.has(word)) return true; + try { + new Function(`var ${word};`); + return false; + } catch { + return true; + } +} + +function prepareTokens(name){ + if (isReservedWord(name)) { + importTokens += `\t_${name},\n`; + keyWordMaps += `\t${name}: _${name},\n`; + } else { + importTokens += `\t${name},\n`; + keyWordMaps += `\t${name},\n`; + } +} + +let importTokens = ''; +let keyWordMaps = ''; const fullStatementTemplates = []; +// preset of world that are external to the core of slangroom statements +const words = [ + 'given', 'then', 'I', 'prepare', 'compute', 'open', 'connect', 'to', 'send', 'and', 'where', 'is', 'with', 'output', 'secret', 'into', // slangroom + 'scenario', 'rule', 'version', 'unknown', 'ignore', // begin of contract + 'when', 'foreach', 'endforeach', 'if', 'endif', // zencode start of sentences different from given and then + 'that', 'have', 'a', 'my', 'the', 'valid', 'named', 'in', 'inside', 'am', 'name', 'known', 'as', 'verify', 'print' //usefull zencode keywords +]; + +let pluginSpecificStatements = ''; +let statementsGt = ''; +let statementsPc = ''; + +const permutations = (arr) => { + if (arr.length <= 1) return [arr]; + + const result = []; + for (let i = 0; i < arr.length; i++) { + const current = arr[i]; + const remaining = arr.slice(0, i).concat(arr.slice(i + 1)); + const perms = permutations(remaining); + for (const perm of perms) { + result.push([current, ...perm]); + } + } + return result; +} const generateStatements = (nameAndPlugin) => { const [name, plugin] = nameAndPlugin; - const p = new Slangroom(plugin).getPlugin() + const nameLowerCase = name.toLowerCase(); + const p = new Slangroom(plugin).getPlugin(); + const pluginStatement = `${name}Statement`; + const pluginStatementsTableGt = []; + const pluginStatementsTablePc = []; p.forEach(([k]) => { let openConnect = ''; - let params = ''; + let sendParams = ''; + let withParams = ''; + let whereParams = ''; + let statementGrammarGt = ''; + let statementGrammarPc = ''; if (k.openconnect) { - openConnect = k.openconnect == 'connect' ? `connect to '' and ` : `open '' and `; + if (k.openconnect === 'connect') { + openConnect = `connect to '' and `; + statementGrammarPc = statementGrammarGt = `connect to StringLiteral and `; + } else if (k.openconnect === 'open') { + openConnect = `open '' and `; + statementGrammarPc = statementGrammarGt = `open StringLiteral and `; + } } + + + statementGrammarPc += `Action<${k.phrase}>`; + let sends = []; + let whereWith = []; if (k.params) { + statementGrammarPc += ` (with | where)`; + if (k.params.length > 1) { + statementGrammarGt += `( `; + statementGrammarPc += `(`; + } k.params.forEach((param) => { - params = params.concat(`send ${param} '' and `); + if (!words.includes(param)) words.push(param); + sends.push(`send ${param} StringLiteral and `); + whereWith.push(` ${param} is? StringLiteral`); + sendParams += `send ${param} '' and `; + withParams += `${param} '', `; + whereParams += `${param} is '', `; }) + statementGrammarGt += permutations(sends).map((perm) => perm.join('')).join('|'); + statementGrammarPc += permutations(whereWith).map((perm) => perm.join('","')).join('|'); + if (k.params.length > 1) { + statementGrammarGt += `) `; + statementGrammarPc += `) `; + } } - const statement = `I ${openConnect}${params}${k.phrase}`; - const lowerCaseStatement = `I ${openConnect}${params.toLowerCase()}${k.phrase.toLowerCase()}`; + statementGrammarGt += `Action<${k.phrase}> SaveAction?`; + k.phrase.split(' ').filter(w => w !== "''" && !words.includes(w)).forEach((w) => words.push(w)); + pluginStatementsTableGt.push(statementGrammarGt); + pluginStatementsTablePc.push(statementGrammarPc); + + withParams = withParams.slice(0, -2); + whereParams = whereParams.slice(0, -2); + const statement = `I ${openConnect}${sendParams}${k.phrase}`; + const withStatement = `${openConnect}${k.phrase} with ${withParams}`; + const whereStatement = `${openConnect}${k.phrase} where ${whereParams}`; + const lowerCaseStatement = `I ${openConnect}${sendParams.toLowerCase()}${k.phrase.toLowerCase()}`; fullStatementTemplates.push( - { label: `${name} given ${lowerCaseStatement}`, displayLabel:`Given ${statement}`, type: "keyword", info: `[${name}]` }, - { label: `${name} then ${lowerCaseStatement}`, displayLabel: `Then ${statement}`, type: "keyword", info: `[${name}]` }, - { label: `${name} given ${lowerCaseStatement} and output into ''`, displayLabel: `Given ${statement} and output into ''`, type: "keyword", info: `[${name}]` }, - { label: `${name} then ${lowerCaseStatement} and output into ''`, displayLabel: `Then ${statement} and output into ''`, type: "keyword", info: `[${name}]` } + { label: `${nameLowerCase} given ${lowerCaseStatement}`, displayLabel: `Given ${statement}`, type: "keyword", info: `[${name}]` }, + { label: `${nameLowerCase} prepare: ${withStatement.toLowerCase()}`, displayLabel: `Prepare: ${withStatement}`, type: "keyword", info: `[${name}]` }, + { label: `${nameLowerCase} prepare: ${whereStatement.toLowerCase()}`, displayLabel: `Prepare: ${whereStatement}`, type: "keyword", info: `[${name}]` }, + { label: `${nameLowerCase} then ${lowerCaseStatement}`, displayLabel: `Then ${statement}`, type: "keyword", info: `[${name}]` }, + { label: `${nameLowerCase} compute: ${withStatement.toLowerCase()}`, displayLabel: `Compute: ${withStatement}`, type: "keyword", info: `[${name}]` }, + { label: `${nameLowerCase} compute: ${whereStatement.toLowerCase()}`, displayLabel: `Compute: ${whereStatement}`, type: "keyword", info: `[${name}]` }, + { label: `${nameLowerCase} given ${lowerCaseStatement} and output into ''`, displayLabel: `Given ${statement} and output into ''`, type: "keyword", info: `[${name}]` }, + { label: `${nameLowerCase} prepare '': ${withStatement.toLowerCase()}`, displayLabel: `Prepare '': ${withStatement}`, type: "keyword", info: `[${name}]` }, + { label: `${nameLowerCase} prepare '': ${whereStatement.toLowerCase()}`, displayLabel: `Prepare '': ${whereStatement}`, type: "keyword", info: `[${name}]` }, + { label: `${nameLowerCase} then ${lowerCaseStatement} and output into ''`, displayLabel: `Then ${statement} and output into ''`, type: "keyword", info: `[${name}]` }, + { label: `${nameLowerCase} compute '': ${withStatement.toLowerCase()}`, displayLabel: `Compute '': ${withStatement}`, type: "keyword", info: `[${name}]` }, + { label: `${nameLowerCase} compute '': ${whereStatement.toLowerCase()}`, displayLabel: `Compute '': ${whereStatement}`, type: "keyword", info: `[${name}]` }, + { label: `${nameLowerCase} given ${lowerCaseStatement} and output secret into ''`, displayLabel: `Given ${statement} and output secret into ''`, type: "keyword", info: `[${name}]` }, + { label: `${nameLowerCase} prepare secret '': ${withStatement.toLowerCase()}`, displayLabel: `Prepare secret '': ${withStatement}`, type: "keyword", info: `[${name}]` }, + { label: `${nameLowerCase} prepare secret '': ${whereStatement.toLowerCase()}`, displayLabel: `Prepare secret '': ${whereStatement}`, type: "keyword", info: `[${name}]` }, + { label: `${nameLowerCase} then ${lowerCaseStatement} and output secret into ''`, displayLabel: `Then ${statement} and output secret into ''`, type: "keyword", info: `[${name}]` }, + { label: `${nameLowerCase} compute secret '': ${withStatement.toLowerCase()}`, displayLabel: `Compute secret '': ${withStatement}`, type: "keyword", info: `[${name}]` }, + { label: `${nameLowerCase} compute secret '': ${whereStatement.toLowerCase()}`, displayLabel: `Compute secret '': ${whereStatement}`, type: "keyword", info: `[${name}]` } ); }); + pluginSpecificStatements += `\nGt${pluginStatement} {\n ${pluginStatementsTableGt.join(' |\n ')}\n}`; + pluginSpecificStatements += `\nPc${pluginStatement} {\n ${pluginStatementsTablePc.join(' |\n ')}\n}`; + statementsGt += `Gt${pluginStatement} |`; + statementsPc += `Pc${pluginStatement} |`; } [ - ['db', db], - ['ethereum', ethereum], - ['fs', fs], - ['git', git], - ['helpers', helpers], - ['http', http], - ['JSONSchema', JSONSchema], - ['oauth', oauth], - ['pocketbase', pocketbase], - ['qrcode', qrcode], - ['redis', redis], - ['shell', shell], - ['timestamp', timestamp], - ['wallet', wallet], - ['zencode', zencode] -].map((x) => generateStatements(x)) + ['Db', db], + ['Ethereum', ethereum], + ['Fs', fs], + ['Git', git], + ['Helpers', helpers], + ['Http', http], + ['JsonSchema', JSONSchema], + ['OAuth', oauth], + ['Pocketbase', pocketbase], + ['QrCode', qrcode], + ['Rdf', rdf], + ['Redis', redis], + ['Shell', shell], + ['Timestamp', timestamp], + ['Wallet', wallet], + ['Zencode', zencode] +].forEach((x) => generateStatements(x)) + +let tokens = ' '; +let keywords = ' '; +for (const w of words) { + tokens += `${w}[@name=${w}], `; + keywords += `${w} | `; + prepareTokens(w); +} await pfs.writeFile('../src/complete_statement.ts', `export const fullStatementTemplates = ${JSON.stringify(fullStatementTemplates, null, 4)}`, 'utf-8') +const syntaxGrammar = await pfs.readFile('./syntax.grammar.template', 'utf-8'); +await pfs.writeFile( + '../src/syntax.grammar', + syntaxGrammar + .replace("{{ Plugin-Specific Statements }}", pluginSpecificStatements) + .replace("{{ GtStatements }}", statementsGt.slice(0, -2)) + .replace("{{ PcStatements }}", statementsPc.slice(0, -2)) + .replace("{{ External-Tokens }}", tokens.slice(0, -2)) + .replace("{{ Keywords }}", keywords.slice(0, -2)), + 'utf-8'); +const tokensFile = await pfs.readFile('./tokens.template', 'utf-8'); +await pfs.writeFile( + '../src/tokens.js', + tokensFile + .replace("{{ tokens }}", importTokens.slice(0, -1)) + .replace("{{ keywordMap }}", keyWordMaps.slice(0, -1)), + 'utf-8'); diff --git a/grammar/utils/syntax.grammar.template b/grammar/utils/syntax.grammar.template new file mode 100644 index 00000000..918c4786 --- /dev/null +++ b/grammar/utils/syntax.grammar.template @@ -0,0 +1,123 @@ +// SPDX-FileCopyrightText: 2024 Dyne.org foundation +// +// SPDX-License-Identifier: AGPL-3.0-or-later + +@top Statement { + ( RuleStatement | ScenarioStatement | RuleStatement | SlangroomStatement | Comment )* +} + +Comment { + comment (newline+ |eof) +} + +SlangroomStatement { + (GtStatement | PcStatement | ThenPrint | GivenHaveStatement | GivenName | WhenStatement | IfEndifStatement |ForEachStatement) +} + +// ===== Rule ===== +RuleStatement { + rule (VersionRule | GenericRule) ( newline+ | eof ) +} +VersionRule { + version VersionNumber +} +GenericRule { + (Keywords | Identifier | StringLiteral)* +} +VersionNumber { + Number '.'? Number? '.'? Number? +} + +// ===== Scenario ===== +ScenarioStatement { + scenario ScenarioType ScenarioComment? ( newline+ | eof ) +} +ScenarioType { + (Keywords | StringLiteral| Identifier) +} +ScenarioComment { + ":" (Keywords | Identifier | StringLiteral)* +} + +@skip { + space +} + +// ===== Zencode Statements ===== +GivenHaveStatement { + given that? I have (a? | my? | the?) valid? StringLiteral named? StringLiteral? (inside | in)? named? StringLiteral? + (newline* and I have (a? | my?) valid? StringLiteral named? StringLiteral? (inside | in)? named? StringLiteral?)* ( newline+ | eof ) +} +GivenName { + ((given I am + (known as)? StringLiteral) | + (given I? my name is + (Keywords | Identifier | StringLiteral)+)) HaveStatement* ( newline+ | eof ) +} +HaveStatement{ + newline+ and I have (a? | my?) valid? StringLiteral named? StringLiteral? (inside | in)? named? StringLiteral? +} +WhenStatement { + when I (Keywords | Identifier | StringLiteral)+ (newline and I (Keywords | Identifier | StringLiteral)+)* (newline+ | eof) +} +IfEndifStatement{ + Condition (IfEndifStatement | WhenStatement | ThenPrint)* endif ( newline+ | eof ) +} +Condition { + if I verify (Keywords | Identifier | StringLiteral)+ ( newline+ | eof ) +} +ForEachStatement { + foreach (Keywords | StringLiteral | Identifier) (in | inside) (Keywords | StringLiteral | Identifier)+ newline+ (ForEachStatement | IfEndifStatement | WhenStatement)* + endforeach ( newline+ | eof ) +} +ThenPrint { + then I? print (Keywords | StringLiteral | Identifier)+ (newline and +I print (Keywords | StringLiteral | Identifier)+)* ( newline+ | eof ) +} + +// ===== Slangroom Statements ===== +GtStatement { + (given | then) I + ({{ GtStatements }}) + ( newline+ | eof ) +} +PcStatement { + (prepare | compute) (secret)? StringLiteral?':' + ({{ PcStatements }}) + ( newline+ | eof ) +} + +// ===== Plugin-Specific Statements ===== + +{{ Plugin-Specific Statements }} + +// ===== Actions ===== + +Action { + term +} + +SaveAction { + and output secret? into StringLiteral +} + +// ===== Keywords and Token ===== + +Keywords { +{{ Keywords }} +} + +@external specialize {Identifier} keywords from "./tokens" { +{{ External-Tokens }} +} + +@tokens { + space { " " | "\t" } + newline { "\n" | "\r\n" } + comment { "#" (![\n])*} + StringLiteral { "'" (![\\\n'] | "\\" _)* "'" } + symbols { $[a-zA-Z_] | "_" } + Identifier { symbols+ Number* } + Number { $[0-9]+ } +} + +@external tokens Eoftoken from "./tokens.js" { eof } diff --git a/grammar/utils/tokens.template b/grammar/utils/tokens.template new file mode 100644 index 00000000..94a0a5a9 --- /dev/null +++ b/grammar/utils/tokens.template @@ -0,0 +1,31 @@ +// SPDX-FileCopyrightText: 2024 Dyne.org foundation +// +// SPDX-License-Identifier: AGPL-3.0-or-later + +import { ExternalTokenizer } from '@lezer/lr'; +import { + eof, +{{ tokens }} +} from './syntax.grammar.terms'; + +export const Eoftoken = new ExternalTokenizer( + (input) => { + if (input.next < 0) { + input.acceptToken(eof); + } + }, + { contextual: true, fallback: true }, +); + +const keywordMap = { +{{ keywordMap }} +}; + +export function keywords(name) { + if (name == 'I') { + return keywordMap[name]; + } + + let found = keywordMap[name.toLowerCase()]; + return found == null ? -1 : found; +} diff --git a/pkg/wallet/src/plugin.ts b/pkg/wallet/src/plugin.ts index 78c36512..015ee059 100644 --- a/pkg/wallet/src/plugin.ts +++ b/pkg/wallet/src/plugin.ts @@ -245,7 +245,7 @@ export const verifyVcSdJwt = p.new( /** * @internal */ -export const keyGen = p.new('create p-256 key', async (ctx) => { +export const keyGen = p.new('create p256 key', async (ctx) => { // Elliptic Curve Digital Signature Algorithm with the P-256 curve and the SHA-256 hash function let sk try { @@ -266,7 +266,7 @@ export const keyGen = p.new('create p-256 key', async (ctx) => { /** * @internal */ -export const pubGen = p.new(['sk'], 'create p-256 public key', async (ctx) => { +export const pubGen = p.new(['sk'], 'create p256 public key', async (ctx) => { // TODO: typecheck sk const sk = ctx.fetch('sk') as JsonableObject; diff --git a/pkg/wallet/test/e2e.ts b/pkg/wallet/test/e2e.ts index c6b619f8..d13ab94e 100644 --- a/pkg/wallet/test/e2e.ts +++ b/pkg/wallet/test/e2e.ts @@ -11,10 +11,10 @@ test('Create VC SD JWT', async (t) => { const scriptCreate = ` Rule unknown ignore -Given I create p-256 key and output into 'issuer_jwk' -Given I create p-256 key and output into 'holder_jwk' -Given I send sk 'holder_jwk' and create p-256 public key and output into 'holder_public_jwk' -Given I send sk 'issuer_jwk' and create p-256 public key and output into 'issuer_public_jwk' +Given I create p256 key and output into 'issuer_jwk' +Given I create p256 key and output into 'holder_jwk' +Given I send sk 'holder_jwk' and create p256 public key and output into 'holder_public_jwk' +Given I send sk 'issuer_jwk' and create p256 public key and output into 'issuer_public_jwk' Given I send jwk 'issuer_jwk' and send holder 'holder_public_jwk' and send object 'object' and send fields 'fields' and create vc sd jwt and output into 'vcsdjwt' Given I send token 'vcsdjwt' and pretty print sd jwt and output into 'pretty_jwt' Given I have a 'string dictionary' named 'issuer_jwk' diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 4697b60d..70f26cdf 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -216,6 +216,9 @@ importers: '@slangroom/qrcode': specifier: workspace:* version: link:../../pkg/qrcode + '@slangroom/rdf': + specifier: workspace:* + version: link:../../pkg/rdf '@slangroom/redis': specifier: workspace:* version: link:../../pkg/redis