Skip to content

Commit 632372d

Browse files
committed
feat(devin-lang): add support for agent properties #101
The DevInLexer and DevInParser have been updated to support agent properties, which are specified using a colon (:) followed by a property value. This change also updates the grammar to support the new syntax and adds new tokens for COLON and PROPERTY_VALUE.
1 parent a7dd530 commit 632372d

File tree

3 files changed

+14
-7
lines changed

3 files changed

+14
-7
lines changed

exts/devin-lang/src/grammar/DevInLexer.flex

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ import com.intellij.psi.TokenType;
3333
IDENTIFIER=[a-zA-Z0-9][_\-a-zA-Z0-9]*
3434

3535
VARIABLE_ID=[a-zA-Z0-9][_\-a-zA-Z0-9]*
36-
AGENT_ID=([a-zA-Z0-9][_\-a-zA-Z0-9]*)(":" [._\-a-zA-Z0-9]*)?
36+
AGENT_ID=[a-zA-Z0-9][_\-a-zA-Z0-9]*
3737
COMMAND_ID=[a-zA-Z0-9][_\-a-zA-Z0-9]*
3838
LANGUAGE_ID=[a-zA-Z0-9][_\-a-zA-Z0-9 .]*
3939

@@ -42,6 +42,7 @@ CODE_CONTENT=[^\n]+
4242
NEWLINE= \n | \r | \r\n
4343

4444
COLON=:
45+
PROPERTY_VALUE=[^ :]+
4546

4647
%{
4748
private boolean isCodeStart = false;
@@ -115,8 +116,10 @@ COLON=:
115116
}
116117

117118
<AGENT_BLOCK> {
118-
{AGENT_ID} { yybegin(YYINITIAL); return AGENT_ID; }
119-
[^] { return TokenType.BAD_CHARACTER; }
119+
{AGENT_ID} { return AGENT_ID; }
120+
{COLON} { return COLON; }
121+
{PROPERTY_VALUE} { return PROPERTY_VALUE; }
122+
[^] { yypushback(1); yybegin(YYINITIAL); }
120123
}
121124

122125
<COMMAND_BLOCK> {

exts/devin-lang/src/grammar/DevInParser.bnf

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -27,15 +27,17 @@
2727
VARIABLE_ID = "VARIABLE_ID"
2828
COMMAND_ID = "COMMAND_ID"
2929
AGENT_ID = "AGENT_ID"
30+
COLON = "COLON"
31+
PROPERTY_VALUE = "PROPERTY_VALUE"
3032
]
3133
}
3234

3335
DevInFile ::= (used | code | TEXT_SEGMENT | NEWLINE)*
3436

3537
used ::= (
36-
AGENT_START AGENT_ID?
37-
| COMMAND_START COMMAND_ID?
38-
| VARIABLE_START VARIABLE_ID?
38+
AGENT_START AGENT_ID (COLON PROPERTY_VALUE)?
39+
| COMMAND_START COMMAND_ID
40+
| VARIABLE_START VARIABLE_ID
3941
)
4042

4143
code ::= CODE_BLOCK_START LANGUAGE_ID? NEWLINE? code_contents? CODE_BLOCK_END?

exts/devin-lang/src/test/testData/parser/BasicTest.txt

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,9 @@ DevInFile
1919
PsiElement(DevInTokenType.NEWLINE)('\n')
2020
DevInUsedImpl(USED)
2121
PsiElement(DevInTokenType.AGENT_START)('@')
22-
PsiElement(DevInTokenType.AGENT_ID)('file:Sample.file')
22+
PsiElement(DevInTokenType.AGENT_ID)('file')
23+
PsiElement(DevInTokenType.COLON)(':')
24+
PsiElement(DevInTokenType.PROPERTY_VALUE)('Sample.file')
2325
PsiElement(DevInTokenType.TEXT_SEGMENT)(' 从文件中读取内容')
2426
PsiElement(DevInTokenType.NEWLINE)('\n')
2527
PsiElement(DevInTokenType.TEXT_SEGMENT)('#system_id:51 传递参数到 story_id')

0 commit comments

Comments
 (0)