<div dir="ltr">Keywords are defined in the lexer:<div><br><div><a href="https://github.com/p4lang/p4c/blob/master/frontends/parsers/p4/p4lexer.ll#L82">https://github.com/p4lang/p4c/blob/master/frontends/parsers/p4/p4lexer.ll#L82</a></div><div><br><div>-N</div></div></div></div><div class="gmail_extra"><br><div class="gmail_quote">On Fri, Jun 9, 2017 at 2:16 PM,  <span dir="ltr"><<a href="mailto:hemant@mnkcg.com" target="_blank">hemant@mnkcg.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">I am aware of the core.p4 file and the p4c compiler.  I am actually using the compiler and it's working out great.  I have poked around some in the p4c compiler source and could not find the header definition yet.<br>
<br>
Hemant<br>
<br>
Quoting Andy Fingerhut <<a href="mailto:andy.fingerhut@gmail.com" target="_blank">andy.fingerhut@gmail.com</a>>:<br>
<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
There is an open source P4 compiler written in C++ here:<br>
<a href="https://github.com/p4lang/p4c" rel="noreferrer" target="_blank">https://github.com/p4lang/p4c</a><br>
<br>
For P4-16 there is a small core.p4 include file used in pretty much every<br>
P4-16 program, but it doesn't 'define' struct or header keywords.  Those<br>
are hard-coded into the compiler.<br>
<a href="https://github.com/p4lang/p4c/blob/master/p4include/core.p4" rel="noreferrer" target="_blank">https://github.com/p4lang/p4c/<wbr>blob/master/p4include/core.p4</a><br>
<br>
Andy<br>
<br>
On Fri, Jun 9, 2017 at 11:21 AM, <<a href="mailto:hemant@mnkcg.com" target="_blank">hemant@mnkcg.com</a>> wrote:<br>
<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
Agree.  I was only pointing out that a keyword can be typedefed if the<br>
keyword is also a type.  It's the struct that is the issue - I am all set.<br>
Is the source to the P4 library that supports keywords available anywhere<br>
so that we could see how is the header defined?<br>
<br>
Thanks,<br>
<br>
Hemant<br>
<br>
<br>
Quoting Mihai Budiu <<a href="mailto:mbudiu@vmware.com" target="_blank">mbudiu@vmware.com</a>>:<br>
<br>
int is a keyword, but it is also a type.<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
struct is not a type. The same holds for header in P4.<br>
<br>
Mihai<br>
<br>
From: <a href="mailto:hemant@mnkcg.com" target="_blank">hemant@mnkcg.com</a> [mailto:<a href="mailto:hemant@mnkcg.com" target="_blank">hemant@mnkcg.com</a>]<br>
Sent: Friday, June 9, 2017 2:54 AM<br>
To: 'Andy Fingerhut' <<a href="mailto:andy.fingerhut@gmail.com" target="_blank">andy.fingerhut@gmail.com</a>><br>
Cc: Mihai Budiu <<a href="mailto:mbudiu@vmware.com" target="_blank">mbudiu@vmware.com</a>>; 'p4-dev' <<a href="mailto:p4-dev@lists.p4.org" target="_blank">p4-dev@lists.p4.org</a>><br>
Subject: RE: [P4-dev] typedef, P4-16 & p4c compiler<br>
<br>
I do know the header is a keyword in P4-16, but so are int and long in<br>
C.  The C preprocessor totally allows, for example, a “typedef int<br>
distance;”.   The issue is because the header may be like a struct in C.<br>
 My use case is typedef a new type from a header and then use the new type<br>
as several headers with different set of bits.<br>
<br>
Hemant<br>
<br>
From: Andy Fingerhut [mailto:<a href="mailto:andy.fingerhut@gmail.com" target="_blank">andy.fingerhut@gmail.c<wbr>om</a>]<br>
Sent: Thursday, June 08, 2017 8:52 PM<br>
To: <a href="mailto:hemant@mnkcg.com" target="_blank">hemant@mnkcg.com</a><mailto:<a href="mailto:hemant@mnkcg.com" target="_blank">hemant<wbr>@mnkcg.com</a>><br>
Cc: Mihai Budiu <<a href="mailto:mbudiu@vmware.com" target="_blank">mbudiu@vmware.com</a><mailto:<a href="mailto:mbudiu@vmware.com" target="_blank">mbud<wbr>iu@vmware.com</a>>>; p4-dev <<br>
<a href="mailto:p4-dev@lists.p4.org" target="_blank">p4-dev@lists.p4.org</a><mailto:<a href="mailto:p4-dev@lists.p4.org" target="_blank">p4-<wbr>dev@lists.p4.org</a>>><br>
Subject: Re: [P4-dev] typedef, P4-16 & p4c compiler<br>
<br>
I believe the string "header" is a keyword in P4-16, and probably cannot<br>
be the name of a type.<br>
<br>
You can define a header type with name "ipv4_t", and then typedef another<br>
type name to be the same as that one like so:<br>
<br>
header ipv4_t {<br>
    // your fields here<br>
}<br>
typedef ipv4_t another_type_name_t;<br>
<br>
then use 'another_type_name_t' any place that you would otherwise use<br>
'ipv4_t'.<br>
<br>
Andy<br>
<br>
On Thu, Jun 8, 2017 at 1:42 PM, <<a href="mailto:hemant@mnkcg.com" target="_blank">hemant@mnkcg.com</a><mailto:<a href="mailto:hemant@mnkcg.com" target="_blank">heman<wbr>t@mnkcg.com</a>>><br>
wrote:<br>
typedef header foo_t;<br>
<br>
From: Mihai Budiu [mailto:<a href="mailto:mbudiu@vmware.com" target="_blank">mbudiu@vmware.com</a><mail<wbr>to:<a href="mailto:mbudiu@vmware.com" target="_blank">mbudiu@vmware.com</a>>]<br>
Sent: Thursday, June 08, 2017 4:40 PM<br>
To: <a href="mailto:hemant@mnkcg.com" target="_blank">hemant@mnkcg.com</a><mailto:<a href="mailto:hemant@mnkcg.com" target="_blank">hemant<wbr>@mnkcg.com</a>>; 'p4-dev' <<br>
<a href="mailto:p4-dev@lists.p4.org" target="_blank">p4-dev@lists.p4.org</a><mailto:<a href="mailto:p4-dev@lists.p4.org" target="_blank">p4-<wbr>dev@lists.p4.org</a>>><br>
Subject: RE: typedef, P4-16 & p4c compiler<br>
<br>
Can you post a code fragment (even if it does not work) showing what you<br>
want to achieve?<br>
<br>
Mihai<br>
<br>
From: <a href="mailto:hemant@mnkcg.com" target="_blank">hemant@mnkcg.com</a><mailto:<a href="mailto:hemant@mnkcg.com" target="_blank">hemant<wbr>@mnkcg.com</a>><br>
Sent: Thursday, June 8, 2017 1:19 PM<br>
To: 'p4-dev'<mailto:<a href="mailto:p4-dev@lists.p4.org" target="_blank">p4-dev@lists.p<wbr>4.org</a>><br>
Cc: Mihai Budiu<mailto:<a href="mailto:mbudiu@vmware.com" target="_blank">mbudiu@vmware.com</a><wbr>><br>
Subject: typedef, P4-16 & p4c compiler<br>
<br>
If C preprocessing is supported in P4, including P4-16, is the P4-16<br>
“header” possible to be typedefed?  I am not sure what the type is because<br>
the header is in the P4 library.  If a C preprocessor allows any C type<br>
such as “int” to be typdefed, why not the P4-16 header?<br>
<br>
Thanks,<br>
<br>
Hemant<br>
<br>
______________________________<wbr>_________________<br>
P4-dev mailing list<br>
<a href="mailto:P4-dev@lists.p4.org" target="_blank">P4-dev@lists.p4.org</a><mailto:<a href="mailto:P4-dev@lists.p4.org" target="_blank">P4-<wbr>dev@lists.p4.org</a>><br>
<a href="http://lists.p4.org/mailman/listinfo/p4-dev_lists.p4.org" rel="noreferrer" target="_blank">http://lists.p4.org/mailman/li<wbr>stinfo/p4-dev_lists.p4.org</a><htt<br>
ps://<a href="http://urldefense.proofpoint.com/v2/url?u=http-3A__lists.p4" rel="noreferrer" target="_blank">urldefense.proofpoint.com<wbr>/v2/url?u=http-3A__lists.p4</a>.<br>
<a href="http://org_mailman_listinfo_p4-2Ddev-5Flists.p4.org" rel="noreferrer" target="_blank">org_mailman_listinfo_p4-2Ddev-<wbr>5Flists.p4.org</a>&d=DwMFaQ&c=<br>
uilaK90D4TOVoH58JNXRgQ&r=tGW6T<wbr>KXajnoXSyy1S1P4DHGPe8sj54GGvw-<br>
b21n7aWg&m=rBRTqD1_dhDUOEybSy0<wbr>5BurT1i2E_alMsKeGQNHNRPU&s=0oc<br>
Byjszt6s5iCDdhYiYJCA2vSMV-Z6sL<wbr>SqtYbL-S1I&e=><br>
<br>
</blockquote>
<br>
<br>
<br>
</blockquote></blockquote>
<br>
<br>
<br>
______________________________<wbr>_________________<br>
P4-dev mailing list<br>
<a href="mailto:P4-dev@lists.p4.org" target="_blank">P4-dev@lists.p4.org</a><br>
<a href="http://lists.p4.org/mailman/listinfo/p4-dev_lists.p4.org" rel="noreferrer" target="_blank">http://lists.p4.org/mailman/li<wbr>stinfo/p4-dev_lists.p4.org</a></blockquote></div><br></div>