我有一个在评论中嵌入信息的来源。例如
//IP x = 3
//IP y = 20
通常,“//”标记为注释,但“// IP”用于指示设置设置信息。
如何解析注释以获取x和y的值?
我可能有这些词法规则,但我不确定动作部分。我可以提取BASIC_IDENTIFIER值吗?
BASIC_IDENTIFIER
: ('a'..'z' | 'A'..'Z') ( '_' | ('a'..'z' | 'A'..'Z') | ('0'..'9') )*
;
IP_COMMENT
: '//IP' (BASIC_IDENTIFIER\s?'='\s?BASIC_IDENTIFIER) ( ~'\n' )* {???}
;
COMMENT
: '//' ( ~'\n' )* {$channel=HIDDEN;}
;
答案 0 :(得分:2)
// START:members
@header {
using System.Collections.Generic;
}
@members {
public static Dictionary<string, string> memory = new Dictionary<string, string>();
}
DECIMAL_LITERAL
: ('0'..'9') ( '_' | ('0'..'9') )* ( ( '.' ('0'..'9') ( '_' | ('0'..'9') )* )? ( EXPONENT )? )
;
BASIC_IDENTIFIER
: ('a'..'z' | 'A'..'Z') ( '_' | ('a'..'z' | 'A'..'Z') | ('0'..'9') )*
;
IP_COMMENT
: '--IP' (' ')+ (id = BASIC_IDENTIFIER) (' ')* '=' (' ')* (val = DECIMAL_LITERAL| var = BASIC_IDENTIFIER) ( ~'\n' )* {VHDLParser.memory[$id.text] = $val.text; $channel=HIDDEN;}
;
COMMENT
: '--' ( ~'\n' )* {$channel=HIDDEN;}
;
现在解析的值在Dictionary中,因此您可以获得键/值对。
foreach (KeyValuePair<string, string> kvp in VHDLParser.memory)
{
Console.WriteLine("{0} - {1}", kvp.Key, kvp.Value);
}
答案 1 :(得分:0)
您需要在词法分析器中优先考虑您的令牌。 this answer对此进行了讨论。因此,使“// IP”的优先级高于“//”。