aiscript icon indicating copy to clipboard operation
aiscript copied to clipboard

プロパティやインデックスの構文

Open marihachi opened this issue 5 years ago • 2 comments

プロパティとプロパティ(関数コール)、インデックスの構文を整理

プロパティやプロパティ(関数コール)やインデックスのことを、 長いのでパス要素と呼びます。

左再帰はサポートされないため回避しないといけない。 解決策の1つとしては、主となる式の後ろにパス要素が複数個付けられるようにすること。 式のASTにpathesのようなのを追加して、あとに続くパス要素を表現できるようにする。

expr
  = expr_item expr_path+

ノード

インデックス

{
	type: 'path';
	index: number; // インデックス値
}

プロパティ

{
	type: 'path';
	name: string; // プロパティ名
}

プロパティ(関数コール)

{
	type: 'path';
	name: string; // プロパティ名
	args: Node[]; // 関数の引数
}

構文

インデックス

他の式ノードの装飾として:
[<index>]

プロパティ

他の式ノードの装飾として:
.<propName>

プロパティ(関数コール)

他の式ノードの装飾として:
.<propName>(<CallArgs>)

marihachi avatar Apr 10 '20 19:04 marihachi

foo["bar"]

もサポートしたい

syuilo avatar Apr 20 '20 11:04 syuilo

Ref = NAME_WITH_NAMESPACE ("[" Expr "]" / "." NAME)*

とすると上手くパースできそう?

cwd-k2 avatar Jul 31 '21 15:07 cwd-k2

Resolved by #196

marihachi avatar Sep 03 '22 13:09 marihachi