aiscript
aiscript copied to clipboard
プロパティやインデックスの構文
プロパティとプロパティ(関数コール)、インデックスの構文を整理
プロパティやプロパティ(関数コール)やインデックスのことを、 長いのでパス要素と呼びます。
左再帰はサポートされないため回避しないといけない。 解決策の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>)
foo["bar"]
もサポートしたい
Ref = NAME_WITH_NAMESPACE ("[" Expr "]" / "." NAME)*
とすると上手くパースできそう?
Resolved by #196