Skip to content

Conversation

@marihachi
Copy link
Contributor

@marihachi marihachi commented Sep 17, 2023

What

今のPEGで書かれたパーサーを手書きの再帰下降パーサーで置き換えます。

  • これまでパーサーで不完全なノード(ChainやAttr)を生成してプラグインで結合していた部分は、
    パーサーのpratt parsingの処理で完全なノードを生成するようになります
  • これまでInfixノードとしてプラグインで処理していた部分はパーサーのpratt parsingの処理で行うようになります
  • CSTノードを削除します
  • パースの前にトークン化(字句解析)を行い、パーサーはそのトークン列を処理してASTノードを生成するようになります
  • ASTノードにソースコード上の位置情報が追加されます
  • 改行の扱いが今までより厳密になります。改行することもできると決められた部分以外では文法エラーになります
  • スペースの厳密さが緩和されます
  • 演算式の途中で改行することが再び禁止されました。改行する場合は行末に\を付けて改行することが必要になります。
  • 文字列リテラルやテンプレートで、\とそれに続く1文字は全てエスケープシーケンスとして扱われるようになりました。

Why

issue参照 #359

Additional info (optional)

@marihachi

This comment was marked as outdated.

@marihachi

This comment was marked as outdated.

@marihachi marihachi requested a review from FineArchs October 8, 2023 02:22
@marihachi marihachi self-assigned this Oct 8, 2023
@marihachi
Copy link
Contributor Author

marihachi commented Oct 8, 2023

全部見るのは大変だと思うので、十分時間を見て特に問題が上がってこなければマージします

@FineArchs
Copy link
Member

issueの方で言われていたような変更点があったと思うので、CHANGELOGに記載をお願いします。

@marihachi
Copy link
Contributor Author

仮にいくつかの問題があったとしても個別に対応できると思うので、
致命的な問題がなければ明日中(10/9)にはマージしようと思います。
cc: @syuilo @FineArchs

@syuilo
Copy link
Collaborator

syuilo commented Oct 9, 2023

YOSASOU

@syuilo
Copy link
Collaborator

syuilo commented Oct 9, 2023

スペースの厳密さが緩和されます

これってそうした理由何かある?

@marihachi
Copy link
Contributor Author

とりあえず一般的なパーサーやトークナイザのスタイルに今は合わせた形
スペースはトークンにならないのが普通だから、スペースがあるかどうかは明示的に確認しない限り、有無は確認されない

スペースの有無を厳密に確認したいならスペースもトークンとして扱えば可能かもしれない

@syuilo
Copy link
Collaborator

syuilo commented Oct 9, 2023

できれば厳密に確認したいけどめんどくさそうならこのままでも良さそう

@marihachi
Copy link
Contributor Author

いや確認したい意図があるなら、確認するように一回考えてみるよ

@syuilo
Copy link
Collaborator

syuilo commented Oct 9, 2023

あーminifyされることが増えていることを考えるとスペース厳密に確認しない方が良いかも

@marihachi
Copy link
Contributor Author

一旦このままいくか

@marihachi
Copy link
Contributor Author

マージは一旦様子を見ます

@FineArchs
Copy link
Member

Syntax Error時の行・列の情報をAiScriptSyntaxErrorオブジェクトに入れることは可能ですか?

@FineArchs
Copy link
Member

その際、出来ればAiScriptSyntaxError自体を

// import { Loc } from './node.js'
export class AiScriptSyntaxError extends AiScriptError {
	public name = 'Syntax';
	constructor(message: string, public loc: Loc, info?: any) {
		super(`${message} (Line ${loc.line}, Column ${loc.column}`, info);
	}
}

のように書き換えて頂けると助かります。

@marihachi
Copy link
Contributor Author

別のPRで対応します

@marihachi marihachi changed the base branch from master to aiscript-next October 15, 2023 06:30
@marihachi
Copy link
Contributor Author

作業ブランチにマージする

@marihachi marihachi merged commit 8101167 into aiscript-dev:aiscript-next Oct 15, 2023
@marihachi marihachi added this to the AiScript Next (2023) milestone Oct 15, 2023
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

match式の仕様を見直したい AiScriptのパーサーを再帰下降のLLパーサーとして書き直す?

3 participants